Commit graph

7661 commits

Author SHA1 Message Date
Anton Danilkin
982c37f544 Fix warnings and pipeline failure 2021-04-13 12:26:16 +02:00
Anton Danilkin
3cb6377c08 Revert "Fix filter being used on the use element causing the content to be clipped"
This reverts commit 2a8672d06e.
2021-04-13 04:31:07 +02:00
Anton Danilkin
90aa943555 Add support for PDF Type 3 fonts 2021-04-13 04:31:07 +02:00
Anton Danilkin
1c1bceb581 Emit bitmap glyph data as images instead of as a bunch of squares, as this results in smaller file size and better quality, allowing the use of shades of gray 2021-04-13 04:31:07 +02:00
Anton Danilkin
1fe3c55712 Do not emit empty glyph paths 2021-04-12 18:49:03 +02:00
Anton Danilkin
2a8672d06e Fix filter being used on the use element causing the content to be clipped 2021-04-12 11:55:56 +02:00
Anton Danilkin
87d5c9e8d1 Add missing include 2021-04-12 00:17:51 +02:00
Anton Danilkin
5932084df3 Remove _cairo_memory_stream_to_string 2021-04-12 00:00:45 +02:00
Anton Danilkin
39dabd34fe Mark CAIRO_PATTERN_TYPE_MESH as unsupported and impose a limit on recording surfaces depth 2021-04-11 23:59:47 +02:00
Anton Danilkin
c91afd777a Do not use parent_matrix in the mask operation 2021-04-11 23:59:47 +02:00
Anton Danilkin
d44bb67c7f Fix clip-rule being emitted on the wrong elements 2021-04-11 23:59:47 +02:00
Anton Danilkin
580e9b9be6 Add my name to the header of cairo-svg-surface.c 2021-04-11 23:59:47 +02:00
Anton Danilkin
500b39e98f Move cairo_svg_surface_t to cairo-svg-surface.c 2021-04-11 23:59:47 +02:00
Anton Danilkin
ceae137ba6 Finish implementing correct paints in transformed recording patterns 2021-04-11 23:59:47 +02:00
Anton Danilkin
c5b24a3e12 Start implementing correct paints in transformed recording patterns 2021-04-11 23:59:47 +02:00
Anton Danilkin
c2ea2848fd Simplify _cairo_svg_surface_emit_composite_surface_pattern 2021-04-11 23:59:47 +02:00
Anton Danilkin
89eda6f650 Simplify ignoring of statuses 2021-04-11 23:59:47 +02:00
Anton Danilkin
cf0023d7ce Simplify SVG document generation 2021-04-11 23:59:47 +02:00
Anton Danilkin
733c38b9f4 Fix and clarify _cairo_svg_surface_do_operator 2021-04-11 23:59:47 +02:00
Anton Danilkin
b5baac736f Do not create temporary single-color patterns. Also, do not try to support CAIRO_CONTENT_COLOR 2021-04-11 23:59:47 +02:00
Anton Danilkin
9ac707374f Fix problems with radial gradients 2021-04-11 23:59:47 +02:00
Anton Danilkin
d397ab6d10 Change the default SVG unit to user unit 2021-04-11 23:59:47 +02:00
Anton Danilkin
f85834a1f5 Do not use the style attribute 2021-04-11 23:59:47 +02:00
Anton Danilkin
71eef9c8bc Implement the rest of the operators 2021-04-11 23:59:47 +02:00
Anton Danilkin
0df89ca8d8 Implement most of the non-blending operators 2021-04-11 23:59:47 +02:00
Anton Danilkin
e728eb43de Implement the in operator 2021-04-11 23:59:47 +02:00
Anton Danilkin
961db5b846 Implement operators for the rest of operations 2021-04-11 23:59:47 +02:00
Anton Danilkin
1a03d883ab Implement operators for the mask operation 2021-04-11 23:59:47 +02:00
Anton Danilkin
a89960a67c Add support for the source and clear operators for the paint operation 2021-04-11 23:59:47 +02:00
Anton Danilkin
f6f73ba836 Add a layer of indiraction to calls to the clipper 2021-04-11 23:59:47 +02:00
Anton Danilkin
daeb9736e9 Update the analyze mode of operations 2021-04-11 23:59:47 +02:00
Anton Danilkin
2a9e189410 Remove the use of extra_attributes 2021-04-11 23:59:47 +02:00
Anton Danilkin
d59c7fb71f Remove the use of discard_filter 2021-04-11 23:59:47 +02:00
Anton Danilkin
0cddf4769c Introduce _cairo_svg_surface_svg_clip_or_svg_mask_should_be_used 2021-04-11 23:59:47 +02:00
Anton Danilkin
7a21a930e9 Add warning supression in one place and remove them in others 2021-04-11 23:59:47 +02:00
Anton Danilkin
3b6ea32854 Do not check the status after creating a memory stream
As we do not check the status after _cairo_output_stream_printf
and _cairo_memory_stream_copy (which are more common operations)
anyway.

This simplifies the code, but keeps it correct, as the status
will be propagated anyway, just a bit later.
2021-04-11 23:59:47 +02:00
Anton Danilkin
170fa0f9bb Fix using signed types where unsigned ones were needed 2021-04-11 23:59:47 +02:00
Anton Danilkin
7ade55ac5b Add new SVG filters system 2021-04-11 23:59:47 +02:00
Anton Danilkin
b340dc19f2 Fix emitting black background for color-only non-bounded SVG surfaces 2021-04-11 23:59:47 +02:00
Anton Danilkin
18c0196414 Fix generating syntactically invalid SVG files 2021-04-11 23:59:47 +02:00
Anton Danilkin
8c08f499bd Fix problems in the SVG backend related to outputting surfaces and patterns
Now the SVG surface should work correctly work with bounded and unbounded image (-like) and recording surfaces with NONE and REPEAT extends as source for all operations.

Fill or stroke with an unbounded surface as source now means using clip or mask respectively.

Fix using unitialized memory in the SVG surface.

Also fix unintialized memory and working with offsetted images in the recording surface.
2021-04-11 23:59:47 +02:00
Uli Schlachter
1484cfa551 Fix out of bounds access in cairo_type1_font_subset_find_segments
This function parses some raw font data and it trusts the font to be
well-formed. This means that a font can just say "this segment is a
gigabyte large" and the code will happily jump ahead in memory. Bad
things then happen in practice.

Fix this by adding lots of bounds check.

Also, an existing bounds check makes sure we are still before the end of
the data, but then happily reads the next six bytes. Fix this by making
sure we actually have six bytes of data.

No regression test since the last few times I tried to do this for font
issues, I ended up with a large/huge blob of font data. Too large for
the test suite.

Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27969
Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-04-11 16:35:02 +00:00
Uli Schlachter
26663cf3be Merge branch 'fix_obvious_ub' into 'master'
Fix undefined left-shifts

See merge request cairo/cairo!149
2021-04-11 05:37:49 +00:00
Heiko Lewin
3ca8a46caf Minor corrections 2021-04-11 02:07:10 +02:00
Marc Jeanmougin
d2a37ba60e
Rename cairo_lines_compare_at_y into _cairo_lines_compare_at_y and fix syntax
Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/467
2021-04-02 14:35:46 +02:00
Heiko Lewin
518ba13779 Fix undefined left-shifts 2021-03-31 12:20:34 +02:00
Uli Schlachter
44f808fce9 Merge branch 'use-after-scope' into 'master'
Avoid a use-after-scope

Closes #453

See merge request cairo/cairo!143
2021-03-25 15:51:32 +00:00
Uli Schlachter
2af4412aa3 Fix a leak in an error path
Tested with valgrind. Before this patch, I got the following "definitely
lost" entry, which is gone afterwards:

94,416 bytes in 1 blocks are definitely lost in loss record 427 of 427
   at 0x483877F: malloc (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
   by 0x4B053F8: cairo_truetype_font_write_glyf_table (cairo-truetype-subset.c:625)
   by 0x4B06219: cairo_truetype_font_generate (cairo-truetype-subset.c:991)
   by 0x4B06917: cairo_truetype_subset_init_internal (cairo-truetype-subset.c:1159)
   by 0x4B06D72: _cairo_truetype_subset_init_pdf (cairo-truetype-subset.c:1255)
   by 0x4B6B113: _cairo_pdf_surface_emit_truetype_font_subset (cairo-pdf-surface.c:5892)
   by 0x4B6C2AD: _cairo_pdf_surface_emit_unscaled_font_subset (cairo-pdf-surface.c:6366)
   by 0x4B02FC7: _cairo_sub_font_collect (cairo-scaled-font-subsets.c:741)
   by 0x4B03A7A: _cairo_scaled_font_subsets_foreach_internal (cairo-scaled-font-subsets.c:1062)
   by 0x4B03B21: _cairo_scaled_font_subsets_foreach_unscaled (cairo-scaled-font-subsets.c:1090)
   by 0x4B6C3ED: _cairo_pdf_surface_emit_font_subsets (cairo-pdf-surface.c:6412)
   by 0x4B62B1A: _cairo_pdf_surface_finish (cairo-pdf-surface.c:2222)

To reproduce, run the test case from the below link.

Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=28023
Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-09 11:14:09 +01:00
Uli Schlachter
e5b9d96f22 Avoid a use-after-scope
This is the same fix as commit b345be5afe, but in a different place in
the same file.

Fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/453
Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-09 07:53:50 +01:00
Heiko Lewin
1569dcd4d8 Merge branch 'ubsan-fixes' into 'master'
UBSan fixes in cairo-truetype-subset.c

See merge request cairo/cairo!124
2021-02-21 16:01:41 +00:00