Commit graph

12910 commits

Author SHA1 Message Date
Uli Schlachter
52760fc90e Fix out-of-bounds access in cff subset
I was looking at [1]. While trying to reproduce the problem that is
described there, valgrind reported:

 Argument 'size' of function malloc has a fishy (possibly negative) value: -8
    at 0x48407B4: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    by 0x4B20E92: cairo_cff_font_read_name (cairo-cff-subset.c:895)
    by 0x4B221AD: cairo_cff_font_read_font (cairo-cff-subset.c:1351)
    by 0x4B24EF2: cairo_cff_font_generate (cairo-cff-subset.c:2587)
    by 0x4B25EA3: _cairo_cff_subset_init (cairo-cff-subset.c:2979)

This commit is about fixing the above.

The function decode_index_offset() returns an unsigned long. This value
was cast to an "int" in cff_index_read(), leading to a possibility for
over/underflow. Also, nothing checked that an entry in the index table
had a non-zero length, leading to an entry with length -8 as reported by
valgrind.

Fix this by using "unsigned long" for the local variables and checking
the length to be non-negative.

With the above fixed, the original test case started crashing.
Apparently, cairo_cff_font_read_name() does not expect nor handle
failures from cff_index_read(). Thus, a check for this case was added to
make the new crash go away.

[1]: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=51324

Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-31 13:43:24 +01:00
Uli Schlachter
488209d9e9 Fix memory leak in type3 glyph surface
In _cairo_type3_glyph_surface_create(), we call
_cairo_surface_clipper_init(), but nothing ever called
_cairo_surface_clipper_reset() in this call. This commit adds that
missing call.

This fixes a leak of a clip.

Since I have no clue about this code (does _cairo_pdf_operators_fini()
possible use the clipper?), I did the patch like this. This should avoid
any possibility for a use-after-free.

Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=51043
Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-31 13:30:57 +01:00
Adrian Johnson
3a60f6e138 Merge branch 'ft-svg-fonts' into 'master'
Support SVG fonts in FT backend

See merge request cairo/cairo!319
2022-12-31 09:27:57 +00:00
Behdad Esfahbod
8c983c0d5d Merge branch 'malloc-stats' into 'master'
[malloc-stats] Fix to not crash

See merge request cairo/cairo!378
2022-12-30 18:12:27 +00:00
Behdad Esfahbod
71c4443139 [malloc-stats] Fix to not crash
Can't use constructor as malloc might be called before that.
2022-12-30 10:34:46 -07:00
Uli Schlachter
8d74c4d019 Speed up coverage-column-triangles test
This commit changes the height of the coverage-column-triangles test by
using a smaller height for the test. Previously the image was 40 pixels
in height and the test took 517 seconds for me. Now, the image has a
height of 4 pixels and the test takes 55 seconds.

This is possible since column_triangles() does the same thing for each y
coordinate. Thus, previously this test just did the same thing 40 times.

Times are measured with the backends I happened to have enabled locally:
script, xcb, xlib, image, recording.

Thanks a lot to Christian Rohlfs for coming up with this idea in
https://gitlab.freedesktop.org/cairo/cairo/-/issues/498#note_1700197

Possibly-fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/498
Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-30 16:36:22 +01:00
Uli Schlachter
35f2610f4d coverage.c: Use width/height arguments
The tests in coverage.c have #defines for WIDTH and HEIGHT, but also
have function arguments for these numbers. This commit changes the tests
to use the function arguments instead of the defines.

One complication is the rhombus test that already had a factor 2 between
these two numbers. A new variable is added to get back the previous
value.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-30 09:29:10 +01:00
Uli Schlachter
4913f07950 Merge branch 'round-join' into 'master'
Remove `round-join-bug-520*` CI exceptions for Quartz backend

See merge request cairo/cairo!377
2022-12-29 12:37:01 +00:00
Christian Rohlfs
aa8d16ab83 Removed round-join-bug-520* CI exceptions for Quartz backend
Removed lines from `.gitlab-ci/ignore-quartz*`;
Added `round-join-bug-520-bevel.quartz.ref.png` file.
2022-12-28 17:50:27 +05:00
Uli Schlachter
2351a65b27 Merge branch 'test-ps' into 'master'
Test cairo-ps in CI

See merge request cairo/cairo!171
2022-12-28 10:52:56 +00:00
Uli Schlachter
a2d05a0c34 ps: Fix crash in self-copy-overlap
According to valgrind, there is a use-after-free here. The function
_cairo_ps_surface_emit_surface() temporarily replaces some member of a
struct and then later re-sets it. However, there is an early return
possible that would skip that part of the code.

This commit moves the re-set up so that no freed pointers are left
behind. This seems to fix the crash.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-28 11:15:01 +01:00
Uli Schlachter
c1aaaff880 Test cairo-ps in CI
This adds the necessary dependencies for testing cairo-ps to CI and sets
up jobs for testing the ps2 and ps3 backends.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2022-12-28 11:14:59 +01:00
Uli Schlachter
0e56ea9d5c Merge branch 'round-join' into 'master'
Fix for round joins

See merge request cairo/cairo!372
2022-12-28 09:58:35 +00:00
Adrian Johnson
394256abba Merge branch 'lzw-compress-1-byte' into 'master'
Fixed crash in _cairo_lzw_compress for 1 byte input

See merge request cairo/cairo!376
2022-12-28 09:55:37 +00:00
Daniel Hammerschmid
bd15b62906 Fixed crash in _cairo_lzw_compress for 1 byte input 2022-12-28 10:16:49 +01:00
Adrian Johnson
9b2e6f1994 Merge branch 'bash-completion' into 'master'
Bash completion for cairo-test-suite

See merge request cairo/cairo!375
2022-12-28 08:34:56 +00:00
Adrian Johnson
fab328598c Bash completion for cairo-test-suite
Usage:

$ source completion.bash
2022-12-28 16:16:18 +10:30
Adrian Johnson
0b5ec0139c Merge branch 'pbounds-size' into 'master'
Ensure pbounds.size is initialized even in EXTEND_NONE mode.

See merge request cairo/cairo!363
2022-12-28 05:42:51 +00:00
Adrian Johnson
7fa02c81f1 Merge branch 'bug-535' into 'master'
Fix bug #535 in cairo-script

Closes #535

See merge request cairo/cairo!276
2022-12-28 05:05:07 +00:00
Adrian Johnson
b13fb85982 Merge branch 'negative-version-values' into 'master'
cairo_pdf_version_to_string: Check for negative values

Closes #590

See merge request cairo/cairo!358
2022-12-28 04:49:59 +00:00
Adrian Johnson
2b862f632d Merge branch 'lzw_eod_code_width' into 'master'
Fix output of EOD code with incorrect code width in _cairo_lzw_compress

See merge request cairo/cairo!359
2022-12-28 04:45:26 +00:00
Adrian Johnson
3e8b9a7cf4 Add some missing slim_hidden entries 2022-12-28 14:00:33 +10:30
Adrian Johnson
1ba3e40d9c FT: support COLRv0 recording surface 2022-12-28 13:22:00 +10:30
Jonathan Kew
4f9b637123 Fix x/y typo in _cairo_pdf_surface_analyze_operation
This can result in spuriously returning UNSUPPORTED and generating rasterized output in cases where this isn't actually necessary.
2022-12-28 13:22:00 +10:30
Adrian Johnson
063f9db67e Fuzzer 2022-12-28 13:22:00 +10:30
Adrian Johnson
8233c6362b ft-svg-render test 2022-12-28 13:22:00 +10:30
Adrian Johnson
252ff60f1e SVG font test using cairo logo 2022-12-28 13:22:00 +10:30
Adrian Johnson
1bd5751324 FT SVG color font test 2022-12-28 13:22:00 +10:30
Adrian Johnson
31700fed4f Support SVG fonts in FT backend 2022-12-28 13:22:00 +10:30
Adrian Johnson
392423aba3 Fix ink extents of recording surfaces within recording surfaces 2022-12-28 13:22:00 +10:30
Adrian Johnson
640e2dadfc user fonts: ensure snap_x/y_scale are initialized 2022-12-28 13:22:00 +10:30
Adrian Johnson
7c5e2758a4 ft: move CAIRO_SCALED_GLYPH_INFO_METRICS into separate function 2022-12-28 13:22:00 +10:30
Christian Rohlfs
e83776572c Round joins fix (spline_cusp_tolerance)
https://gitlab.freedesktop.org/cairo/cairo/-/issues/520
2022-12-28 07:25:30 +05:00
Christian Rohlfs
805897b1f7 test: Add new round-join-bug-520 tests
https://gitlab.freedesktop.org/cairo/cairo/-/issues/520
2022-12-28 06:52:29 +05:00
Adrian Johnson
e1f07966a6 Merge branch 'dwrite-disable' into 'master'
meson: allow disabling DWrite

See merge request cairo/cairo!374
2022-12-26 20:14:28 +00:00
Benjamin Gilbert
6ec9cd3096 meson: allow disabling DWrite
When building with MinGW-w64, DWrite introduces a libstdc++ dependency
which may not be desired.
2022-12-24 20:18:46 -05:00
Uli Schlachter
7fc6df6dd2 Merge branch 'document-premul' into 'master'
Document whether colors are premultiplied

See merge request cairo/cairo!373
2022-12-24 13:00:32 +00:00
Matthias Clasen
1df5969ef6 Document whether colors are premultiplied
For the various APIs that take or return
RGBA colors, make it explicit that they are
unpremultiplied.
2022-12-24 07:22:39 -05:00
Uli Schlachter
12cd2bcbb2 Merge branch 'testfix' into 'master'
Zero terminate temp buffers before calling strcat.

See merge request cairo/cairo!369
2022-11-25 13:23:31 +00:00
Jussi Pakkanen
44ff5e4e6c Zero terminate temp buffers before calling strcat. 2022-11-24 22:41:36 +02:00
Uli Schlachter
8cb6deed39 Merge branch 'pass-quartz-tests' into 'master'
Pass quartz tests

See merge request cairo/cairo!367
2022-11-18 15:54:40 +00:00
John Ralls
c014a7dda3 Require macOS CI job to pass again. 2022-11-17 16:20:23 -08:00
John Ralls
04cf47b57a Change expected fails and reference image so that Quartz CI passes. 2022-11-17 16:20:14 -08:00
Emmanuele Bassi
f672f20f02 Merge branch 'fix-long-lines' into 'master'
Pass the same type when creating the static glyphs and positions arrays.

Closes #574

See merge request cairo/cairo!366
2022-11-17 22:18:17 +00:00
John Ralls
21ab756bd9 Pass the same type when creating the static glyphs and positions arrays.
Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/574
2022-11-17 10:49:18 -08:00
Uli Schlachter
8f1190dc82 Merge branch 'remove-explicit-dependency-on-libssp' into 'master'
Remove explicit dependency on libssp

See merge request cairo/cairo!360
2022-10-28 13:06:36 +00:00
Luca Bacci
392b2b02f7 perf: fix compilation on Win32 2022-10-28 12:44:45 +02:00
Luca Bacci
c75220fe08 Remove explicit dependency on libssp
It's not needed anymore.

Linking explicitly with libssp was required for toolchains where the
target libc doesn't implement stack smashing protection routines on
its own, and instead delegates to the generic implementations provided
by libssp. Notably, this was the case of mingw-w64 toolchains.

After discussion upstream with Meson developers [1], the stance taken
is that Meson users (and Meson itself) shall have no knowledge of the
libc internals and whether libssp is required. instead, libc's should
declare a dependency on the generic libssp on their own by means of
.spec files [2].

Following the discussion in Meson Github, the issue was then fixed in
mingw-w64 upstream [3].

References:
 * https://github.com/mesonbuild/meson/issues/10673
 * https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html
 * https://github.com/msys2/MINGW-packages/issues/13401
2022-10-28 12:44:45 +02:00
Tim-Philipp Müller
0a111ad1fa Merge branch 'ci-update-windows-image' into 'master'
ci: update Windows image to latest,  update glib wrap, and add separate msvc jobs for shared and static build

See merge request cairo/cairo!364
2022-10-28 00:21:31 +00:00
Tim-Philipp Müller
cb726f5729 ci: mark macOS job as allowed to fail, unit tests are broken 2022-10-28 00:20:20 +01:00