forked from GNOME/librsvg
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
1263 lines (1039 loc) · 51.3 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Version 2.47.1
- Librsvg no longer depends on libcroco! It now does all CSS
processing using Rust crates from Mozilla Servo; these are also the
crates that are in use in recent versions of Firefox. As a result,
librsvg can now handle much more complex CSS selectors than before.
Fixes #79, #167, #237, #283, #336, #428, #441, #466, #525, #525
(Paolo Borelli, Federico Mena). Thanks to Evgeniy Reizner
for fixing https://github.com/servo/servo/issues/22972, which made
it possible to use Servo's selectors crate.
- #524 - Panic when reading an invalid stylesheet URL in an XML
processing instruction (Paolo Borelli)
- Lots of little improvements to the documentation.
- Link-time optimization (LTO) is disabled by default on release
builds, as this increased build time too much. Downstream
distributors may want to turn it back on in the toplevel Cargo.toml.
- We now have the start of documentation on the library's internals at
https://gnome.pages.gitlab.gnome.org/librsvg/doc/rsvg_internals/index.html
This should be interest of newcomers to librsvg's source code.
Version 2.47.0
- Librsvg's XML parser now supports namespaces (xmlns), and is
stricter than before about it. Files may fail to parse if there are
attributes or elements with namespace prefixes (e.g. foo:bar instead
of plain bar), but without a corresponding namespace declaration
(e.g. xmlns:foo="http://example.com/foo").
This may happen especially with incorrectly-written SVGs that use
xlink:href or xi:include attributes without the corresponding
namespace declarations. If you run into this, just add the
following to your toplevel SVG element:
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude">
^^^^^^^^^ these ones
- Patterns and gradients reused across more than one element will only
get resolved once now; this should make things marginally faster for
patterns or gradients with fallbacks.
- #515 - Librsvg now has limits on the number of loaded XML elements,
and the number of referenced elements within an SVG document. This
is to mitigate malicious SVGs which try to consume all memory, and
those which try to consume an exponential amount of CPU time.
- #521 - Compute geometries correctly if there is a viewBox attribute.
- #308 - Fix stack exhaustion with circular references in <use> elements.
- Consistently use the LGPL 2.1 wherever it is mentioned.
- Patterns and gradients reused across more than one element will only
get resolved once now; this should make things marginally faster for
patterns or gradients with fallbacks.
- #515 - Librsvg now has limits on the number of loaded XML elements,
and the number of referenced elements within an SVG document. This
is to mitigate malicious SVGs which try to consume all memory, and
those which try to consume an exponential amount of CPU time.
- #506 - Fix empty patterns which reference a fallback pattern with
children.
Version 2.46.0
- The following are highlights compared to the 2.44.x series. For
full details, please see the release notes for the 2.45.x series.
- All of librsvg.so is now implemented in Rust! That is, except for a
very thin wrapper over the public API functions. Hopefully we can
remove this wrapper when Cargo gets some more features around
controlling the linking step. This release requires at least Rust 1.34.
- Librsvg now comes with a Rust crate that can be used from Rust
applications. See librsvg_crate/examples. This Rust API is
designed to be idiomatic; if you want a Rust binding to the shared
library instead, please use the "rsvg-rs" crate from crates.io.
- The following API functions are new in the C library:
rsvg_handle_get_intrinsic_dimensions()
rsvg_handle_render_document()
rsvg_handle_render_layer()
rsvg_handle_render_element()
rsvg_handle_get_geometry_for_layer()
rsvg_handle_get_geometry_for_element()
Correspondingly, there is a new chapter in the documentation, called
"Recommendations for Applications". These new APIs conform better
with the web platform's idea of how SVG sizing/positioning should
work. Applications should now find it easier to scale and render
SVGs in a single call, instead of having to obtain image dimensions
first.
- A bunch of functions have been deprecated but are still available:
- rsvg_handle_write()/close() are deprecated in favor of the
stream functions. Unfortunately the write()/close() pair
require buffering the entire document, in case it is a .svgz
compressed file; the streaming functions do not have this
problem.
- Functions that return RsvgDimensionData and RsvgPositionData are
deprecated, since they just use integers instead of floating
point numbers. They are replaced with the _get_geometry_*()
functions above.
- The library is a lot more strict now in terms of detecting that the
API functions are called in the correct order. For example, calling
rsvg_handle_get_dimensions() before rsvg_handle_close() will now
emit a critical warning.
- Librsvg is gradually moving towards using code from Mozilla's Servo.
We haven't quite gotten rid of libcroco and libxml2 yet, but this is
in progress.
- Many thanks to all the people who participated in the long cycle for
2.45. Having the whole library's functionality in Rust is a big
accomplishment!
Version 2.45.92
- #496 - Ensure all lengths and angles parse as finite numbers
- #497 - Don't panic on paths with all-invalid commands
- #500 - Added additional SVG blend-modes for the feBlend filter primitive (Andargor)
- Some changes in the build structure to allow for faster builds.
Version 2.45.91
- The documentation has a new chapter, Recommendations for Applications.
- #451 - Make rsvg-convert detect images larger than pixman's limit.
- #410 - Update introspection annotations.
- #449 - librsvg_crate: Make cancellable arguments consistent with gio-rs
- librsvg_crate: Take all gio arguments as IsA<SomeGioType> generics
- Updated Rust crates to avoid duplicates (Bastien Orivel)
Version 2.45.90
- New API functions:
rsvg_handle_render_document()
rsvg_handle_render_layer()
rsvg_handle_render_element()
rsvg_handle_get_geometry_for_layer()
rsvg_handle_get_geometry_for_element()
CairoRenderer in the librsvg_crate has corresponding functions
as well.
- Fix builds with gettext ≥ 0.20 (Ting-Wei Lan).
- If the C API is called out of order, downgrade hard panics to
g_critical() to cope with incorrect/old applications that called
rsvg_handle_get_dimensions() before rsvg_handle_close().
- API reference documentation is much improved.
Version 2.45.8
- This version requires at least Rust 1.34.
- #485 - Fix build on Rust earlier than 1.36 (Kleis Auke Wolthuizen).
- More polishing of the Windows build (Chun-wei Fan).
- Update gtk-rs and dependent crates (Bastien Orivel)
Version 2.45.7
- Fix #463 - Don't panic if an SVG has character data outside the
first element.
- Fix #467: Don't panic when there's an xi:include fallback with no
parent element. Thanks to Bastien Orivel for running afl-fuzz
on librsvg.
- Fix #471: Fix blurry semi-opaque objects when rendering with a
scaled transformation. Thanks to the gnome-games people for
isolating a test case and to Evgeniy Reizner for providing a more
minimal one.
- Fix #481: Don't ignore the first x/y/dx/dy in text/tspan elements if
there is more than one position specified.
- #452 - In librsvg_crate, SvgHandle now has a ::has_element_with_id()
method.
- rsvg-convert now catches the case where the SVG has no dimensions.
- Replaced the Visual Studio build infrastructure for NMake
(Chun-wei Fan).
- This version no longer contains the rsvg-view program, so librsvg no
longer depends on GTK. Please see
https://people.gnome.org/~federico/blog/removing-rsvg-view.html for
the rationale behind this change.
- The poly element no longer supports "verts" as an alias for the
"points" attribute. The "verts" name was only used in SVG pre-1.0,
and we had been cargo-culting that name ever since.
- We now use more machinery from Mozilla Servo, in this case the
markup5ever and rust-selectors crates. This is in line with
gradually replacing libcroco with a Rust-only CSS machinery.
- Lots and lots of refactoring and cleanups: use the rctree crate
instead of our own tree representation; remove interior mutability
in element structs; make the gradients and patterns code less
repetitive (Paolo Borelli).
- Update some dependencies (Bastien Orivel).
- New section in COMPILING.md about cross-compilation to Windows using
mingw (Takuro Ashie)
- Fix static linking and Windows builds (Kleis Auke Wolthuizen).
Version 2.45.6
- Librsvg now requires Rust 1.30.0 or later.
- Librsvg now requires Cairo 1.16.0 or later. Thanks to
Julian Sparber for keeping up with cairo-rs API changes.
- This version introduces librsvg_crate, an idiomatic Rust crate for
using librsvg from Rust programs directly, without using GObject
machinery. This API is subject to change, but you can start using
it now in an experimental fashion. Thanks to Paolo Borelli and
Jordan Petridis for fine-tuning this new API.
- All of the librsvg internals are now in Rust! The C code is just a
thin wrapper over Rust functions.
- The internals library has been converted to Rust 2018 (Jordan Petridis).
- Within librsvg_crate, there is a new infrastructure for doing
reftests in Rust, that does not depend on PNG reference files. See
librsvg_crate/tests for details.
- This release introduces the following new APIs:
rsvg_handle_get_intrinsic_dimensions(),
rsvg_handle_get_geometry_for_element().
- Parsing of the "style" attribute, which has a plain list of CSS
property declarations, is now done with rust-cssparser.
- CSS selector matching should be marginally faster than before.
- Fix Visual Studio builds (Chun-wei Fan).
- Fix #11 - Respect the "direction" property for bidirectional text (Khaled Hosny).
- Fix #295 - Ensure the initial viewport fits into temporary surfaces for compositing
- Fix #425 - Don't fail parsing if the system's locale is broken (Paolo Borelli).
- Fix #438, #443 - Don't create intermediate raster surfaces unless
absolutely needed. This was causing blurred output for SVGs from
Inkscape and Illustrator, since they include an "enable-background"
property even when there are no filters in use. Thanks to Julian
Sparber, Jordan Petridis, Zeeshan Ali for doing a huge "git bisect"
to find the cause of this bug.
- Fix #443 - Fix blurry output when enable-background is used without filters.
- Fix #455 - Fix rounding error on i386 (Olivier Tilloy).
- Check for Cairo errors when constructing paths.
Version 2.45.5
- At build time, you can now pass $CARGO and $RUSTC environment
variables if you need to override the default Rust toolchain.
Please see COMPILING.md for details. (Tobias Kortkamp)
- Fix #405 - In the gdk-pixbuf loader, don't crash if the write()
function doesn't receive a GError.
- Fix #268 - Remove the comp-op property; it's not in SVG 1.1 nor SVG 2.
- Fix #415 - register RsvgHandleFlags and the RsvgError enum values in
a thread-safe fashion (Sebastian Dröge).
- All of the library's non-GObject functionality is implemented in
Rust now.
- Update the cairo crate (Kornel Lesiński).
- Clean up the loading code paths (Paolo Borelli).
- Updated compilation docs for Debian (Jordan Petridis)
- Updated parts of the reference documentation.
Version 2.45.4
- Brown paper bag release, my apologies.
- Fix #402 - Fix the library's soname. Thanks to Gabriele Balducci
for reporting it, and Kalev Lember for fixing it.
Version 2.45.3
- Big news! All the real work in the library is now implemented in
Rust. The public API is implemented in C, but most it calls
immediately into the Rust code. Special thanks to Paolo Borelli and
Carlos Martín Nieto for making this possible.
- rsvg_handle_set_base_uri() now really assumes that it is passed a
URI. Previously it would try to differentiate between real URIs,
and absolute or relative file paths. If this breaks your code
(i.e. you are passing a filename, not a URI), please tell us so we
can restore the old behavior!
- Fix #395 - Don't panic in feMorphology if it ends up with a negative
scaling transformation.
- Fix #398 - Detect circular references in gradients.
- Match the Firefox/Chrome behavior on gradients and patterns with
circular references for fallbacks (Paolo Borelli).
- Fixes for Rust 1.30 and below (Jordan Petridis).
- Lots and lots of refactoring (Paolo Borelli, Federico Mena).
Version 2.45.2
- rsvg_cleanup() is now deprecated. This was only meant to be called
from code to be checked by Valgrind. Leak checkers may show
reachable memory from libxml2; real memory leaks should still be
reported, of course. (Kornel Lesiński).
- As an experimental change, librsvg no longer calls xmlInitParser()
from libxml2. Please tell us if this causes problems for
multithreaded programs.
- Added g_warning()s to ensure the API is called in the correct
sequence.
- The text handling code has been completely refactored and
simplified. This will allow us to implement the x/y/dx/dy
properties for multiple glyphs in the future. Please report any
problems you experience in text rendering.
- Fix #385 - Don't crash if there is no rsvg_handle_write() before
rsvg_handle_close().
- Fix #391 - Avoid undefined behavior when casting opaque pointers
(Jordan Petridis).
- Fix crash when a linear RGB filter is followed by an SRGB filter
(Ivan Molodetskikh).
- Fix #393 - Stack overflow when freeing thousands of sibling elements.
- Fix positioning of adjacent <tspan> elements.
- All the toplevel loading and drawing code is implemented in Rust now.
- Pixbuf conversion code is in Rust now (Paolo Borelli).
- Cleanups in the code for XML processing, markers, attributes (Paolo
Borelli).
- Many build/link fixes (Jordan Petridis).
- Cleanups in the code that calls libxml2 (Kornel Lesiński).
Version 2.45.1
- New public API, rsvg_handle_get_geometry_sub(), to get the exact
geometry of an element. The functions
rsvg_handle_get_position_sub() and rsvg_handle_get_dimensions_sub()
are deprecated now; these returned incomplete data with integer
coordinates (Julian Sparber).
- rsvg_handle_write() and rsvg_handle_close() are now deprecated in
favor of the functions which use a GInputStream. The former need to
buffer the entire SVG data first; the latter don't need buffering.
- Librsvg no longer tries to load XML entities which reference
external resources, either parameter or general entities, declared
in the DTD. This never worked properly, and it is better to do so
via the xi:include mechanism. Also, unparsed external entities with
a notation are not really supported in SVG; it has its own <image>
element and similar for that purpose. Only internal general
entities are supported now, for example:
<!ENTITY foo "<some xml here>">
<!ENTITY bar "some text here">
- Started support for localized error messages (Daniel García Moreno).
- Ported to Rust: loading code, XML processing code, data: URL parsing,
- Many code cleanups and refactorings, courtesy of Paolo Borelli.
- Fix undefined behavior in casts (Jordan Petridis).
- Cairo/Rust API updates by Julian Sparber.
- configure.ac cleanups by Maya Rashish.
Version 2.45.0
- Librsvg now requires Rust 1.27.
- Librsvg now requires Cairo 1.15.12.
- Fix building when srcdir != builddir (Mathieu Bridon).
- Fix #339 - Panic in filters with primitiveUnits="objectBoundingBox"
on zero-sized elements (Ivan Molodetskikh).
- Fix #335 - Don't panic if the toplevel node is not <svg>.
- Fixes from fuzz testing (Ivan Molodetskikh): don't panic when the
feConvolveMatrix kernel is not set; fix upper bounds in filter pixel
getters.
- Fix #337 - Don't panic with "em" or "ex" units in the font-size property.
- Fix #338 - Don't panic when an image element doesn't have
width/height attributes.
- Fix #340 - Don't panic when a marker has a zero-sized viewBox attribute.
- Fix #341 - Don't infinite-loop with cyclic pattern references.
- Fix #342 - Don't crash if a <use> node references one of its ancestors.
- Special thanks to Ivan Molodetskikh for doing a fuzz-testing run for
this round.
- Fix #344 - Don't panic when a viewBox has overflowing numbers.
- Fix #345 - Fix panics due to bad path parsing and overflows in
surface size.
- Updates to the CI infrastructure and the build documentation (Jordan
Petridis).
- Cleanups and refactoring (Paolo Borelli, Linus Unnebäck, Federico Mena).
- Fix #343 - Handle child being in error in feComponentTransfer.
- Fix #346 - Handle filter primitives producing errors.
- Fix #347 - Regression in computation of text element extents.
- Fix #348 - Fix incorrect font sizing.
- Fix #349 - Don't panic when loading an external image that is bigger
than Cairo's limits.
- Fix - rsvg_handle_get_dimensions_sub() no longer panics if passed a
nonexistent fragment identifier.
- Fix 32-bit builds (Jordan Petridis).
- Fix #256 - Correctly match the systemLanguage attribute with the
user's locale.
- Fix #320 - Parse xml:lang correctly.
- Fix #334 - Don't modify the caller's cairo_t state during rendering.
- Fix #349 - Don't panic if we get a "data:" URI with empty data.
- Fix #352 - Don't panic on getting a very large "order" for
feConvolveMatrix (Ivan Molodetskikh).
- Fix #363 - Don't drop spaces around <tspan> elements.
- Fix #365 - rsvg-convert now uses pixel units for SVG output, instead
of points. This requires cairo 1.15.12 (Antonio Ospite).
- Fix #358, #366 - tweaks to have the test suite pass on i386 and
non-x86_64 platforms (Simon McVittie, Federico Mena).
- Fix #368 - With RSVG_LOG=1, librsvg will now report when SVGs have
references to nonexistent elements, to aid debugging (for example,
in an xlink:href attribute).
- Fix #371 - rsvg-convert was positioning extracted elements
incorrectly when using the -w/-h options together with --export-id.
- Fix #372 - Mis-rendering in small arc segments.
- Fix #373 - Rendering of gradients for horizontal/vertical stroked
lines with gradientUnits="userSpaceOnUse".
- Fix a couple of memory leaks in the error paths of the GdkPixbuf
loader (Benedikt Heine).
- Allow reference tests with a small difference to pass without
breaking the build (Simon McVittie).
- CSS processing code is now in Rust, although it still calls libcroco
to do the parsing.
- XML processing code is partially moved to Rust, although it still
calls libxml2 for the XML parsing.
- Special thanks to Alex Crichton for ensuring that MacOS builds work.
Version 2.44.2
- A *double brown paper bag* release! Super strong, this one!
- Fix #325 - Don't leak all the elements at the toplevel.
- Fix #328 - Make masking work on big-endian. Thanks to
Simon McVittie for quick testing of this on s390x.
- Fix library ordering so -Wl,--as-needed works (Simon McVittie).
Version 2.44.1
- This is a brown paper bag release! Apologies for the bugs:
- Fix #324 - Don't panic if trying to render a non-empty SVG with no
elements (Paolo Borelli).
- Fix #325 - All the elements were being leaked at the toplevel.
- Fix #326 - Fix COMPILING.md - librsvg 2.44 does not build on Ubuntu
18.04 because it has a rust version that is too old.
Version 2.44.0
- Librsvg now has minimal logging for debugging by setting the
RSVG_LOG environment variable. See CONTRIBUTING.md for details.
- Speed improvements for Gaussian blur, SRGB conversions, and various
filters (Ivan Molodetskikh).
- Fix #264 - the letter-spacing property now supports "normal" in
addition to lengths (Paolo Borelli).
- Fix #318 - the font-weight property was being parsed incorrectly.
- Fix #323 - don't use 100% "forever" with malicious SVGs that cause
an exponential number of elements to be instanced through the
<use> element. We limit the number of <use> instances now.
- Fix #293 - Don't panic when masking an empty group.
- Fix #319 - Parse single font-family correctly.
- Cleanups for the internal representation of elliptical arcs in paths
(letheed).
Version 2.43.4
- This is an early release to test the effects of threading in librsvg.
- The lighting and Gaussian blur filters are now parallelized with
Rayon; they will use all available cores (Ivan Molodetskikh).
Version 2.43.3
- Tentative fix: #309 - Don't panic if rendering to a non-image Cairo surface.
- Optimizations for Gaussian blur and other filters (Ivan Molodetskikh).
- Optimizations in SRGB <-> linear RGB conversions (Ivan Molodetskikh).
- More C to Rust conversion in the loading code (Paolo Borelli).
Version 2.43.2
- All the filter effects have been ported to Rust as part of Ivan
Molodetskikh's Summer of Code project!!!!!
- We now require Rust 1.26.
- We now include Rust debug information even in release builds, to make it
easier to obtain stack traces.
- Fix #310 - Respect DPI in the font-size property (Mike Marcacci).
- Fix: draw the circle/ellipse elements with the same orientation as
the SVG 1.1 test suite; this is relevant for stroke-dasharray (Ivan
Molodetskikh).
- Refactoring of the drawing code and font sizes (Paolo Borelli).
- New filters in Rust: feConvolveMatrix, feColorMatrix, feMorphology,
feDisplacementMap, feGaussianBlur, feDistantLight, feSpotLight,
fePointLight, feTile.
- Updated Rust dependencies (Igor Gnatenko).
Version 2.43.1
- Fix: #259 - Test fonts should now work with --enable-installed-tests
- Fix: #277 - Don't panic when trying to filter an empty group
(Ivan Molodetskikh).
- Fix: #292 - Don't panic if we try to clip an empty group.
- Fix the feOffset filter's coordinate parsing. (Ivan Molodetskikh).
- Fix linearization of SRGB data in the feComposite filter (Ivan
Molodetskikh).
- Fix CSS cascading in filters (Ivan Molodetskikh).
- Fix, don't render filters if they are in error (Ivan Molodetskikh).
- Fixed a couple of memory leaks in the test suite.
- Filters now support FillPaint and StrokePaint for input (Ivan Molodetskikh).
- Filters now support the color-interpolation-filters property
(Ivan Molodetskikh).
- The feImage, feBlend, feComponentTransfer filters are now in Rust
(Ivan Molodetskikh).
- The feOffset filter now supports fractional offsets (Ivan Molodetskikh).
- The drawing context code is now in Rust. This is a tremendous
amount of work! (Paolo Borelli)
- All the style property parsers have been moved to rust-cssparser.
Version 2.43.0
- This is the start of the 2.43 development series, and you bet we are
doing extensive changes!
- Many, many thanks to Jordan Petridis for keeping our Continuous
Infrastructure updated all the time, and for emergency fixes when
they were necessary.
- As part of the Summer of Code 2018, Ivan Molodetskikh is porting the
filter effects to Rust. These are done so far: core filters
infrastructure, feComposite, feMerge, feOffset. The only remaining
SVG elements done in C pertain to filter effects, and Ivan is taking
care of them.
- The feComposite filter now operates in linear RGB space, for better
spec compliance. We transform back to SRGB for the final results
(see issue #275 for pending work on fully supporting this
elsewhere).
- Filters now compute their bounds to floating-point values, instead
of clipping them to integers.
- The text, tspan, tref elements are now in Rust (Paolo Borelli).
- Text rendering should be better. We now perform text measurement
operations with the actual affine transformation that the text will
use in the end. This should give Pango/Freetype a better chance of
doing scale-appropriate hinting.
- The basic styling infrastructure has moved to Rust (Paolo Borelli,
Federico Mena). We don't use the old and limited cascading code
anymore. We also audited which CSS properties are supposed to
inherit automatically or not; this should be working per the SVG
spec now. Special thanks to Paolo for doing the largest part of the
work in moving the style data to Rust; this was a painstaking,
months-long process of constant refactoring.
- The internals of the drawing infrastructure and bounding-box
computation are now done in Rust (Paolo Borelli).
- Element creation from the parsing stage is now in Rust (Saurav
Sachidanand).
- Clipping and Masking are now done in Rust (Paolo Borelli).
- Our tests now include the full Adwaita icon theme, so it doesn't
break.
- Fix: #241 - feDistantLight and feSpotLight now work again.
- Fix: #282 - feComposite is fixed not to overwrite the source image
in some cases; this fixes drop shadows generated from Inkscape (Ivan
Molodetskikh).
- We have the beginnings of Windows CI, courtesy of Guillaume Gomez.
- Changes from 2.42.4:
- Fix: elements with systemLanguage attributes without variants now
work better (Paolo Borelli).
- gitlab#227 - Fix: we now catch negative values in stroke-dasharray
properties instead of leaving the cairo_t in an error state.
- gitlab#228 - Fix: empty transform attribute now correctly yields an
identity transform (Dmitry Kontsevoy).
- Fix possible crash on invalid gradient references.
- Make robust against patterns and gradients with no children.
- Lots of code cleanups and refactorings (Jordan Petridis, Dmitry
Kontsevoy, Ivan Molodetskikh).
- Code moved to Rust: low-level path and PangoLayout drawing, "switch"
element (Paolo Borelli).
- New Rust dependencies: float_cmp, pangocairo crates.
- We now require Rust 1.21 or later.
- Changes from 2.42.5:
- #276 - rsvg_handle_render_cairo() will now refuse to render if the
cairo_t passed to it is in an error state. Fixes a panic in the
cairo-dock program.
- #206 - The test suite now writes test artifacts to tests/output
instead of /tmp (Saurav Sachidanand).
Version 2.42.3
- gitlab#205 - The configure script now checks for Rust 1.20.0 -
previously this minimum requirement was not well-defined.
- gitlab#204 - New feature: If an SVG has an <a> link element, we now
generate the corresponding link when outputting to a Cairo PDF
surface. If you use rsvg-convert(1) with PDF output, <a> links in
the SVG will work in the PDF (Dmitry Kontsevoy).
- gitlab#108 - New feature: support font-size:larger and font-size:smaller
relative sizes.
- New feature: rsvg-convert now supports SOURCE_DATE_EPOCH per
https://reproducible-builds.org/specs/source-date-epoch/ to generate
reproducible output for PDFs (Chris Lamb).
- gitlab#197 - New requirement: We now require Freetype2 2.9.0, which
fixes font rendering bugs. The test reference PNGs have been
regenerated with this version. You may see changes in font
rendering as a result of this updated requirement.
- gitlab#91 - Fix rendering of masks and clips when the initial
transformation has a translation component (Massimo).
- gitlab#112 - Fix: apply style attributes for all SVG elements, not just
for the toplevel one.
- gitlab#161 - Fix the marker angle for the last vertex of closed
paths (Juraj Fiala).
- gitlab#198 - Fix: Make rsvg_pixbuf_from_file() and its derived
functions work again. Now we have tests for the whole public API.
- gitlab#143 - Minor optimizations for Gaussian blurs (Timm Bäder).
- gitlab#201 - Minor speedups in the code to parse SVG attributes.
- gitlab#178 - Fix some tests that failed on 32-bit machines.
- COMPILING.md now lists our build dependencies, and has command lines
which you can use on openSUSE/Fedora/Debian/Ubuntu/MacOS to set up a
development environment for librsvg (Jordan Petridis, Brion Vibber).
- gitlab#211 - Running the configure script on MacOS now works and
doesn't try to use -Bsymbolic for linking (Brion Vibber).
- gitlab#In addtion to --enable-debug/--disable-debug to control the Rust
compilation, now you can use an environment variable
LIBRSVG_DEBUG=yes / LIBRSVG_DEBUG=no if you wish.
- Code moved to Rust: SVG paint servers (Dmitry Kontsevoy), SVG
attribute parsing.
- We now use a Cargo workspace internally, to move more things to Rust
(Jordan Petridis, Chun-wei Fan).
- Special thanks in this release to Jordan Petridis for MAJOR
improvements to our Continuous Integration infrastructure, the
repository structure, and updates to the compilation documentation.
Also for setting up 32-bit builds for continuous integration.
Version 2.42.2
- gitlab#193 - Don't crash when feConvolveMatrix doesn't specify
orderx/ordery attributes.
- gitlab#136 - Parse stroke-dasharray property correctly. This code
is in Rust now; yay! (Jordan Petridis).
- Don't render markers if they are zero-sized, per the spec.
- Performance: eliminate a bunch of string copies during parsing.
- Update rust-cssparser to 0.23 (Igor Gnatenko).
Version 2.42.1
- gitlab#182 - Parse the transform attribute in a faster/simpler way.
We now use rust-cssparser instead of lalrpop. This is especially
noticeable on SVGs with lots of "transform" attributes.
- gitlab#187 - Don't crash when setting a gradient on a zero-sized object.
- gitlab#184 - (Windows) Don't use PangoFT2 if not available (Chun-wei Fan).
- gitlab#181 - Inherit attributes in the <svg> element properly.
- gitlab#160 - rsvg-convert - fix error reporting when reading from
stdin (Phlip Withnall).
- gitlab#152 - Fix detection of image type in "data:" URIs when they
don't specify a MIME type (Andreas Smas).
- gitlab#117 - (Windows) rsvg-convert - Set stdout to O_BINARY
(Bakhtiar Hasmanan).
- gitlab#133 - More stringent parsing of path data; better tests.
- (Windows/MSVC) Fix linking of the Rust internals library (Chun-wei Fan).
- Fix typos and links in the .md files.
Version 2.42.0
- Fix a memory leak in rsvg_handle_new_from_file() (Lovell Fuller).
- Optimize the xml:space normalization function (Jordan Petridis).
- gitlab#179 - fix a runtime warning in the feMergeNode code.
- gitlab#175 - Clarify documentation about the rsvg_*_sub() APIs.
- Stylistic fixes from cargo-clippy (Jordan Petridis).
- Port the Pango glue code to Rust.
- New ARCHITECTURE.md with a description of librsvg's internals.
Version 2.41.2
- We now require glib 2.52.0.
- bgo#787895 - Fix mis-use of libxml2. Thanks to Nick Wellnhofer for
the guidance.
- bgo#761175 - Allow masks and clips to reuse a node being drawn.
- Fix xml:space normalization, per the spec.
- Don't access the file system when deciding whether to load a remote
file with a UNC path for a paint server (i.e. don't try to load it at all).
- We now support cross-compilation of the Rust code (David Michael).
See COMPILING.md for details.
- Fixed bugs from Coverity runs (Philip Withnall).
- Vastly improved README.md, new COMPILING.md, improved CONTRIBUTING.md.
- Markers now have the correct default size per the SVG spec.
- Visual Studio: We now use HIGHENTROPYVA linker option on x64 builds,
to enhance the security of built binaries (Chun-wei Fan).
- Cargo is now verbose as well if you use "make V=1".
- Fixed some memory leaks.
- Don't render elements that establish a viewport if their viewBox
size is 0, per the spec.
- SVG elements ported to Rust: image, clipPath, mask, character data in elements.
- Fixed loading files one byte at a time.
- Reference documentation is now DocBook 5.1.
- Reference docs now have an overview of the library.
- Distribute README.md in the tarball properly.
- Expanded the test suite.
- Lots of internal refactoring.
Version 2.41.1
- The feConvolveMatrix filter primitive wasn't being rendered at all;
now it works.
- Pattern specifications can now have a fallback color, per the spec -
https://www.w3.org/TR/SVG/painting.html#SpecifyingPaint
- Tests now use a very basic form of reproducible font rendering.
This means that "make check" should pass even if you have a custom
Fontconfig setup.
- Fixed recursive fallbacks in gradients.
- Per the spec, we now don't render elements which have invalid
attributes.
- Windows build: support building with Fontconfig; support Visual
Studio 2017; generate .pc files upon install (Chun-wei Fan)
- Fixed bgo#621088 - Text elements can now be used as clipping paths.
- Fixed bgo#587721 - Fix rendering of text elements with transformations
(Massimo)
- Fixed bgo#776932 - Don't crash on elements with an invalid
"transform" attribute.
- Fixed bgo#777155 - Ignore patterns that have close-to-zero dimensions.
- Fixed bgo#776297 - Don't render markers for rect / circle elements;
fix marker angles in some cases (Massimo).
- Fixed bgo#777834 - Don't crash when rendering text with empty
extents.
- Fixed bgo#634324 - Gaussian blur with negative-scaling
transformation was being rendered incorrectly.
- Fixed bgo#783835 - Don't divide by zero in Gaussian blurs
- Fixed division by zero in feTile filter when the input surface is
empty.
- Fixed bgo#779489 - Link to pangoft2 as required.
- Don't crash in filters when one of them yields an invalid surface
for an intermediate result.
- Update for bgo#778666 - Use our own thumbnailer specification file
(Jeremy Bicha).
- Fixed bgo#782098 - Don't pass deprecated options to gtkdoc-scangobj
(Ting-Wei Lan).
- Fixed bgo#777833 - Various memory leaks (Philip Withnall, Federico Mena)
- Fixed bgo#786372 - Use the correct default for the style element's
"type" attribute.
- Fixed bgo#634514 - Don't render unknown elements and their children.
- Fix parsing of "azimuth", "elevation", "limitingConeAngle" for
filter effects.
- Fixed bgo#785276 - Don't crash on empty or single-byte files.
- Made the <switch> element work; SVG feature names were being
tested incorrectly.
- Fixed a few cases of uninitialized struct fields.
- Code converted to Rust: preserveAspectRatio attribute, viewBox
attribute, core Node structure, path/line/rect/circle/ellipse basic
shapes, group/defs/switch/svg/use/symbol structural elements, pattern element
and pattern fallbacks, marker rendering, various parsers, error
propagation from parsers, gradient stops, gradient element,
- Added a bunch of new test cases for the new features and the
code converted to Rust.
- We now require cairo-rs 0.2.0
- We now require lalrpop 0.13.1
- The librsvg tarball now comes with the Rust dependencies embedded
using "cargo vendor". Linux distros can replace these dependencies
with their own versions using the infrastructure described in
http://doc.crates.io/source-replacement.html
Version 2.41.0
- The big news is that parts of librsvg are now implemented in the
Rust programming language, instead of C. The public API remains
identical. Rust should provide us with memory safety and nicer
built-in abstractions for the code, as well as an easier way to do
unit tests. Special thanks to all the people who sent tips on Rust
idioms, and to Sebastian Dröge and Hubert Figuière for the Automake bits.
- Added an "--enable-debug" option to configure.ac - this will tell
the Rust compiler to generate debugging code, instead of working in
release mode. Note that you must still pass CFLAGS by hand by the
regular means for the C code.
- For Windows builds, only MSVC 2012 and upward are supported now.
- Chun-wei Fan made it possible to regenerate the MSVC project files
when Makefile.am changes.
- Fixed bgo#763386 - handle curveto segments where three control
points are coincident. Thanks to Massimo for the detailed test cases.
- Fixed bgo#603550 - Compute the luminance correctly when generating a
mask. Thanks to Mike Lewis for the patch.
- Fixed bgo#776297 - Only render markers in path, line, polygon,
polyline elements.
- Fixed feImage filters when they reference SVG nodes; they were
translated incorrectly.
- Fixed feComponentTransferFunction when there are duplicated feFuncX
elements.
- Fixed bgo#761871 - handle reflection points for quadratic and cubic
curves correctly.
- Fixed bgo#686953 - support the "marker" shorthand property.
- Fixed a few minor issues pointed out by Coverity.
- The path data parser now handles boolean values in Arc elements correctly.
- Fixed conformance bugs in gradient inheritance.
- Radial gradients now adjust the focus point correctly to be within
the gradient's radius.
- Stroke width normalization is now conformant to the spec.
- Viewport-relative length normalization is now conformant to the spec.
- Added some of the official SVG 1.1 test files to our test suite. Fixed
a little bunch of conformance bugs.
- As a small optimization, we only push/pop CSS states when rendering
will actually happen, instead of for all (potentially invisible) nodes.
- Code that has been converted to Rust: marker orientations and
rendering, path data parser, path building, length normalization,
gradient inheritance, bounding boxes with affine transformations.
- Lots of refactoring to accomodate the Rust code, and general cleanups as well.
- Added tests/README.md with instructions on how to run the test suite
and update it.
rsvg-test can now skip files or directories that start with "ignore".
- Improved the README.
Version 2.40.16
- Chun-wei Fan added support for building the introspection files under MSVC.
- Fixed bgo#760262 - Make the zooming options in rsvg-convert(1) work again
for scaling the resulting image. Fix by Menner <[email protected]>.
- Fixed bgo#764808 - Wikipedia generates equations as SVGs and renders
them, but uses fill="currentColor". Since we don't let callers
specify a starting state for CSS, we need to start with opaque black
as the default current color.
- Added documentation for how to replace the deprecated
rsvg_handle_set_size_callback().
Version 2.40.15
- Apologies for the lack of 2.40.14. I mistakenly tagged the
repository before updating the NEWS file.
- librsvg now uses the Contributor Covenant Code of Conduct,
version 1.4, to which all contributors and maintainers are expected
to abide. Please see the code_of_conduct.md file for details.
- Chun-wei Fan fixed builds on Visual Studio pre-2012.
- Fixed bgo#759084 - Don't crash when filters don't actually exist
Fix by Benjamin Otte.
- Javier Jardón updated our autogen.sh to use modern autotools.
- Fixed bgo#761728 - Memory leak in the PrimitiveComponentTransfer
filter. Fix by Ron Hopper.
Version 2.40.13
- Chun-wei Fan and Paolo Borelli fixed the Windows build.
- Menner added basic support for the "baseline-shift" attribute in
text objects. We support "sub", "super", and plain "baseline", so
you can at least have subscripts and superscripts for formulas and
such. There is no support for percentages or explicit lengths yet.
bgo#340047.
- Menner fixed some duplicate logic when rendering paths, which would
try to decide whether to create intermediate surfaces. Now we have
a single place where this is done. This fixes inconsistent text
spacing in some situations. bgo#749415.
- Rewrote the markers engine, for bgo#685906 and bgo#760180 - Our
machinery for rendering SVG markers (like arrowheads and such)
didn't handle several cases correctly. Curves with coincident
control points produced incorrect orientations for the markers, as
did multiple contiguous zero-length segments. We follow the spec
for this now and handle things correctly. Also, markers didn't
render in the correct position if they had the viewBox attribute
set.
Version 2.40.12
- Benjamin Otte did *great* work in refactoring the test harness to
use Glib's gtest infrastructure, instead of using home-grown
machinery. Tests can simply be put as SVG files in the tests/
subdirectories; it is not necessary to list them explicitly in some
text file. Yay!
- Gzipped SVGs now work if read from streams.
- References to objects/filters/URIs/etc. are now handled lazily.
Also, there is a general-purpose cycle detector so malformed SVGs
don't cause infinite loops. Work by Benjamin Otte.
- Removed parsing of Adobe blend modes; they were not implemented, anyway.
- Fixed bgo#700911 - feComponentTransfer filter functions did not work at all.
- Fixed bgo#630732 - out-of-bounds read in feComponentTransfer with tableValues.
- Fixed bgo#677068 - incorrect reflection points in paths.
Version 2.40.11
- Add project files for building on Visual Studio (bgo#753555). Work
by Chun-wei Fan.
- Added an "--export-id" option to rsvg-convert(1). This lets you
select a single object to export, for example, to pick out a group
from a multi-part drawing. Note that this is mostly useful for PNG
output right now; for SVG output we don't preserve many attributes
which could be useful in the extracted version. Doing this properly
requires an internal "output to SVG" backend instead of just telling
Cairo to render to SVG.
Version 2.40.10
- Fixed bgo#748608 - Memory leak when Gaussian-blurring. Thanks to
Carlos Garnacho for fixing my leaky code.
- Fixed bgo#739329 - font-family attributes with singly-quoted names
were not handled correctly, yielding incorrect fonts. Patch by Menner.
- Fixed bgo#476507 - Path start/end markers didn't have the correct angle
if the path was a curve with coincident control points. Patch by Menner.
- Fixed bgo#688689 - Support font-style="normal" within a non-normal
styled text block. Patch by Paolo.
- Fixed builddir != srcdir. Patch by Matthias Clasen.
- Remove a bunch of deprecated GTK+ calls.
- This version of librsvg requires GTK+ 3.10.0, which is, ahem, only two years old.
We previously required a version of GTK+ which is four years old. Out with
the old, in with the old.
Version 2.40.9
- Fixed bgo#738367 - V/v/H/h commands in path elements were not
working. Patch by Andrea Griffini.
- Fixed bgo#605875 - Gaussian-blurred objects were sometimes missing.
Based on a patch by Eduard Braun.
- Fixed bgo#710163 - use _wfullpath() on Windows when canonicalizing
filenames. Patch by LRN.
Version 2.40.8
- Bugs fixed from fuzz testing: #744688 - possible double g_free()
when processing stroke-dasharray
- Optimize rendering of polylines, lines, rectangles, circles, and
ellipses. These should be marginally faster, marginally more
precise, and should put less pressure on the memory allocator.
Version 2.40.7
- Bugs fixed from fuzz testing: #703102, #738050, #738169, #744270, #744299
- Fixed unfiled bug from fuzz testing, where the convolution filter
had an integer multiplication overflow.
- Fix build of rsvg-convert on Windows.
- Fix a bunch of compiler warnings.
Version 2.40.6
- MinGW build fixes
- Fix path data number parsing
- Fix build with newer libtool
Version 2.40.1
- Build fixes
- Crash fixes
Version 2.40
- Add support for parsing rgba() colours and improve colour parsing
- rsvg-filter: Fix memory leak
- Remove support for GTK+2 along with the old theme engine
- Require at least version 3.2 of GTK+
- Remove support for old versions of gdk-pixbuf
- Add eps support to rsvg-convert
Version 2.39.0
- don't load resources from the net (#691708, CVE-2013-1881)
Version 2.37.0
- bump pango requirement to 1.32.6
- mark pixbuf loader as threadsafe
Version 2.36.4
- build fixes
Version 2.36.3
- build fixes
Version 2.36.2
- GObject introspection fixes (#677674)
- added Vala bindings (#677676)
- deprecate including headers apart from rsvg.h directly
- build fixes (#677661)
Version 2.36.1
- Bugs fixed: #672725, #672791, #672885, #673748
Version 2.36.0
- Bugs fixed: #669563, #672414, #672792, #672725
Version 2.35.2
_ Bug fixes
Version 2.35.1
- Bugs fixed: #664684, #664533, #665905, #665824
Version 2.35.0
This version contains many bug fixes and improvements.
- Update libxml2 dependency to 2.7.0
- Make GIO and libcroco hard requirements
- Use attributes for deprecations instead of defines
- Many memory leaks plugged
- Bugs fixed: #621636, #630112, #624820, #624835, #581108, #614157,
#630733, #473862, #590788, #626559, #663049, #663049
Version 2.34.1
This version contains fixes for CVE-2011-3146.
- cairo: reduce cost of measuring bounding boxes
- Use "const" instead G_CONST_RETURN (#652213)
- Call xmlFreeParserCtxt after using the context (#655472)
- Store node type separately in RsvgNode (#658014)
Version 2.34.0
- Allow building rsvg-view with gtk 3
Bugs fixed:
629392 - stroke-dasharray is inherited by sibling texts
626802 - NULL-ptr crash in g_str_equal in rsvg-styles.c
641586 - configure should honour aclocal flags ACLOCAL_FLAGS
640336 - Typo in rsvg.1
635214 - svgz never supported by pixbuf loader
FDO 30071 - crash when rendering this svg with librsvg to a pdf or ps or recording surface
629412 - Missing test files on librsvg-2.31.0
630714 - fix stray comma
Version 2.32.1
Version 2.32.0
Version 2.31.0
- buildable against standalone gdk-pixbuf
- require GIO
- Bug fixed:
337979 text size not rendered correctly
545158 Segfault or bad rendering when displaying a SVG file
614556 Background pixbuf in filter process should not be created if it's not needed.
616018 cairo-freetype font rendering code should be removed.
620130 Decode base64 inplace