Commit graph

11897 commits

Author SHA1 Message Date
Uli Schlachter
dfd543d013 Merge branch 'fix-cairo-malloc' into 'master'
Change int to size_t in the _cairo_malloc function family

See merge request cairo/cairo!153
2021-04-17 07:06:06 +00:00
Anton Danilkin
67099a091e Change int to size_t in the _cairo_malloc function family
This should allow to use them for allocating large amounts of memory.

Also use explicit checks for zeros to not make the compiler think that it is a boolean context.
2021-04-13 19:20:05 +02:00
Tim-Philipp Müller
c287fb3a1f Merge branch 'win32-atomic' into 'master'
atomic: Add support for WIN32 atomic operations

See merge request cairo/cairo!151
2021-04-12 08:30:57 +00:00
Heiko Lewin
277a1daec8 Merge branch 'type1_find_segments_bounds_check' into 'master'
Fix out of bounds access in cairo_type1_font_subset_find_segments

See merge request cairo/cairo!146
2021-04-11 16:35:03 +00: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
Seungha Yang
cd2b91c62e atomic: Add support for WIN32 atomic operations
Windows provides atomic operation APIs so use it
2021-04-09 01:26:20 +09:00
Uli Schlachter
1904d7bf35 Merge branch 'fix-467' into 'master'
Rename cairo_lines_compare_at_y into _cairo_lines_compare_at_y and fix syntax

Closes #467

See merge request cairo/cairo!150
2021-04-02 13:43:39 +00: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
33cce5dc37 Merge branch 'pdf-mime-data' into 'master'
"Fix" the pdf-mime-data test

See merge request cairo/cairo!142
2021-03-25 15:51:13 +00:00
Uli Schlachter
c48ea2737c Merge branch 'serial-test-harness' into 'master'
Use the serial automake test harness

See merge request cairo/cairo!138
2021-03-25 15:50:44 +00:00
Uli Schlachter
5090dc3f4a Merge branch 'flush-in-tests' into 'master'
test suite: fflush() before fork()

See merge request cairo/cairo!139
2021-03-25 15:50:22 +00:00
Uli Schlachter
f5a4ec8ada Merge branch 'mime-unique-id' into 'master'
Fix the mime-unique-id test for me

See merge request cairo/cairo!141
2021-03-25 15:49:50 +00:00
Tim-Philipp Müller
104dfd8b04 Merge branch 'ci-bump-windows-image' into 'master'
ci: bump windows image to latest version to fix github ssl certificate issues

See merge request cairo/cairo!148
2021-03-22 11:22:09 +00:00
Tim-Philipp Müller
b40b1afaec ci: bump windows image to latest version to fix github ssl certificate issues 2021-03-20 16:16:27 +00:00
Tim-Philipp Müller
f604b4ba92 Merge branch 'gyf-table-leak' into 'master'
Fix a leak in an error path

See merge request cairo/cairo!144
2021-03-10 16:57:08 +00:00
Tim-Philipp Müller
b718dae717 Merge branch 'meson-make-cairo-trace-executable' into 'master'
meson: make cairo-trace executable

Closes #462

See merge request cairo/cairo!145
2021-03-09 19:08:29 +00:00
Tim-Philipp Müller
ca478e0327 meson: make cairo-trace executable
Install with exec flag set and make sure tool is
executable in build directory as well (by making
the input file in the source directory executable).

Fixes #462
2021-03-09 10:59:57 +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
Uli Schlachter
2f25fa68c0 test/pdf-mime-data.c: Check for pdfimages
Currently, the pdf-mime-data check just fails for me with the following
output:

    sh: 1: pdfimages: not found
    pdf-mime-data: FAIL

pdf-mime-data.log contains:

    pdfimages failed with exit status 32512

Since I do not have pdfimages installed... yeah.

This commit "fixes" that problem by skipping the test if pdfimages is
not available. No idea if it would pass if it were available, but I do
not feel like installing pdfimages just to test.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 17:31:37 +01:00
Uli Schlachter
2a8d90c6fc pdf-mime-data: Fix for out-of-tree builds
This makes the code use the existing helper for loading PNGs that also
considers the $srcdir environment variable. This makes it find the file
in out of tree builds.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 17:27:52 +01:00
Uli Schlachter
0c64c216aa pdf-mime-data: Fix error checking
I am not quite sure, but an if for "ignore this error if something
failed" seems wrong. Either this should have compared against status2 or
checked for success. This commit fixes the code for the latter.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 17:26:50 +01:00
Uli Schlachter
433d9eb109 Update the PDF size limit in mime-unique-id
The test mime-unique-id checks that some images are only embedded once
in a PDF. It does so by checking if the file size is within some
expected bounds. However, the test fails for me because the file is too
small. Yes, too *small*.

Fix this by updating the test to expect my current file size.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 16:30:33 +01:00
Uli Schlachter
0fd2197e2b test/mime-unique-id: Fix for out-of-tree builds
Instead of failing because it did not find an image, this now fails for
me since the PDF is too small (???).

This new code is modelled after cairo_test_create_surface_from_png().

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 16:28:51 +01:00
Uli Schlachter
446d3972e5 test suite: fflush() before fork()
Forking a process also duplicates the buffers of FILE*s. Thus, if there
is pending data, both the parent and the child process will write
things. This is seldom a good idea.

This issue was not noticed so far since by default the test suite
already calls fflush() a lot. However, when stdout and stderr are both
not a tty (according to isatty(1) and isatty(2)), these flushes are
skipped. The result is that the child process repeat the full output
from the test suite starting with "Compiled against cairo 1.17.4,
running on 1.17.4."

To reproduce this problem run: ./cairo-test-suite 2>&1 | cat

Fix this by flushing all the files that I managed to find before fork().

Thanks to Pekka Paalanen for helping me figure this out.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-08 13:45:07 +01:00
Uli Schlachter
7788000be0 Merge branch 'meson-allow-skipping-of-run-check-for-ipc-rmid-deferred-release-in-cross-build' into 'master'
meson: allow skipping of run check for IPC_RMID_DEFERRED_RELEASE

Closes #408

See merge request cairo/cairo!134
2021-03-05 08:08:55 +00:00
Tim-Philipp Müller
71ece6d149 Merge branch 'alatiera/exclude-artifacts' into 'master'
ci: cleanup the autotools artifacts a bit

Closes #465

See merge request cairo/cairo!137
2021-03-04 11:09:29 +00:00
Jordan Petridis
921cc3e57a
ci: cleanup the autotools artifacts a bit
Exclude .trace and .cs file from being exported.
This brings down the generated artifacts size to 73mb.

Close #465
2021-03-04 12:51:12 +02:00
Uli Schlachter
57068e62a5 Use the serial automake test harness
Once upon a time, automake had one way to run tests. Apparently this is
(nowadays?) called the serial test harness. Then, in some release (I do
not remember which one), the parallel test harness became the default.

The parallel harness runs all tests in parallel, but does not (really)
show the test output, but instead has output redirected to files. Sort
of. I did not find the result of my printf() anywhere.

The automake docs strongly discourage using the serial test harness [0],
but do not really say why. For cairo, I do not see problems:

We have some quick, small checks (e.g. is cairo_public used where needed
in the public headers). And then there is the big, heavy-weight test
suite (cairo-test-suite). Thus, running these things in parallel has
basically no benefits.

Additionally, cairo-test-suite takes really, really long. Not seeing any
output while it is running is annoying. Failing to find the output even
in files is bad.

Thus, since I do not see any benefits and only downsides to the parallel
test harness, this commit switches to the serial one.

[0]: https://www.gnu.org/software/automake/manual/html_node/Serial-Test-Harness.html

Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-04 08:10:10 +01:00
Tim-Philipp Müller
d847f1d621 Merge branch 'spectre-dep' into 'master'
meson: Move libspectre to test_deps

Closes #425

See merge request cairo/cairo!135
2021-03-01 14:10:04 +00:00
Uli Schlachter
55a5951742 meson: Move libspectre to test_deps
libspectre is only used for ps tests. Adding it to "deps" needlessly
makes it show up in cairo.pc's Requires.private.

Fixes: https://gitlab.freedesktop.org/cairo/cairo/-/issues/425
Signed-off-by: Uli Schlachter <psychon@znc.in>
2021-03-01 14:06:02 +01:00
Tim-Philipp Müller
1bec56ea8a meson: allow skipping of run check for IPC_RMID_DEFERRED_RELEASE
The run check is particularly annoying in cross-compile scenarios,
so allow bypassing the check by having the user provide the value
via a cross file or native file:

  [properties]
  ipc_rmid_deferred_release = true

Closes #408
2021-02-25 10:56:45 +00:00
Uli Schlachter
553c19df16 Merge branch 'meson-add-option-to-disable-xlib-xcb' into 'master'
meson: add xlib-xcb option and disable by default

Closes #438

See merge request cairo/cairo!132
2021-02-25 06:57:31 +00:00
Jan Alexander Steffens (heftig)
3468c67fe9 meson: add xlib-xcb option and disable by default
Just like autotools does.

Closes #438.
2021-02-25 01:29:53 +00:00
Uli Schlachter
8d2f3f4afc Merge branch 'meson-force-utf8-file-encoding-in-scripts' into 'master'
meson: use encoding=utf-8 when reading/writing files in helper script

See merge request cairo/cairo!129
2021-02-24 15:14:45 +00:00
Tim-Philipp Müller
784be5d859 Merge branch 'alatiera/cairo-header' into 'master'
meson: declare dependancy on libcairo_dep for overrides

See merge request cairo/cairo!130
2021-02-24 14:27:54 +00:00
Tim-Philipp Müller
f7ac4181d6 meson: declare dependancy on libcairo_dep for overrides
When declaring a dependency on a feature, say `dependency('cairo-png')`
the resulting object did not depend on cairo and thus was missing
basic things like, `cairo.h` from its include dir.

Make it so overrides do in fact include the basic cairo functionality
needed for them to work.

Related:
https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/236
2021-02-24 03:03:07 +02:00
Tim-Philipp Müller
9732f4e80f meson: use encoding=utf-8 when reading/writing files in helper script
Fixes errors such as

Traceback (most recent call last):
  File "C:\Users\...\cairo\test\make-cairo-test-constructors.py", line 19, in <module>
    for l in f.readlines():
  File "c:\python39\lib\encodings\cp1253.py", line 23, in decode
    return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 6694: character maps to <undefined>

on non-English-language Windows locales/installations.
2021-02-23 23:42:11 +00:00
Uli Schlachter
d85738b39c Merge branch 'utils-cairo-trace-update-for-new-bfd' into 'master'
cairo-trace: fix build with newer bfd and remove backtrace-symbols.c

Closes #391 and #460

See merge request cairo/cairo!128
2021-02-23 13:19:00 +00:00
Tim-Philipp Müller
0ed1053d8f utils: remove hacky replacement for backtrace_symbols in glibc
Doesn't build any more, is very much non-essential, and hasn't
been touched in any meaningful way since it was added 13 years
ago, so just remove it for now until someone steps up. Chances
are the glibc version has improved since then.
2021-02-23 12:29:58 +00:00
Tim-Philipp Müller
e30259f623 cairo-trace: fix build with newer versions of bfd
And update configure/meson checks to check for the new function.

Drop libiberty.h check since it's only needed by backtrace-symbols.c
which we're about to remove.

Closes #391, #460
2021-02-23 12:29:58 +00:00
Uli Schlachter
d6c1787ac1 Merge branch 'meson-symbol-lookup-option' into 'master'
meson: add symbol-lookup option to allow disabling bfd/libiberty usage

See merge request cairo/cairo!127
2021-02-23 11:33:45 +00:00
Tim-Philipp Müller
e0cf7b869f meson: add symbol-lookup option to allow disabling bfd/libiberty usage
Can be used to workaround build issues caused by changes
in the bfd API until those have been resolved.

https://gitlab.freedesktop.org/cairo/cairo/-/issues/460
https://gitlab.freedesktop.org/cairo/cairo/-/issues/391
2021-02-23 10:35:42 +00:00
Heiko Lewin
9e84988f41 Merge branch 'fix-448-test' into 'master'
Make the test case for bug 448 pass

See merge request cairo/cairo!123
2021-02-21 16:09:28 +00: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
Jonathan Kew
967ac93789 Don't call _cairo_array_append_multiple with a zero count.
The documentation for _cairo_array_append_multiple says "one or more items".
If it is called with num_elements=0, it ends up calling _cairo_array_grow_by
with num_elements=0, which if the array is currently empty (as here) leads
to undefined behavior in _cairo_array_allocate in the line

    *elements = array->elements + array->num_elements * array->element_size;

because it ends up trying to add 0 to a null pointer. C doesn't allow this.
(UBSan flags this as "applying zero offset to null pointer".)
2021-02-21 16:01:40 +00:00