Commit graph

13100 commits

Author SHA1 Message Date
Uli Schlachter
662b072733 Merge branch 'enhancements' into 'master'
Fixes for the new release

Closes #929 and #921

See merge request cairo/cairo!661
2026-05-01 12:01:14 +00:00
Luca Bacci
d97438f1be Drop unneeded assert
We can't ensure that no error happened whatsoever.

Fixes #929
2026-05-01 11:29:38 +02:00
Luca Bacci
01e522b200 Fix build with CAIRO_NO_MUTEX
The LibreOffice project builds Cairo with -DCAIRO_NO_MUTEX.
IMHO that's quite risky for big projects where you don't
control all the code that uses Cairo, but I assume they know
what they're doing.

This change should have been part of commit 87f7c60bf7, but
admittetly CAIRO_NO_MUTEX builds are not actively tested.

Fixes #921
2026-05-01 11:29:38 +02:00
Luca Bacci
8a8262e9cd cairo-script: Fix build on 64bit Windows with LZO enabled
lzo_uint is a typedef for a machine-sized unsigned integral.

We track sizes using unsigned long, which is machine-sized
on most (all?) Unices, but 32bit on 64bit Windows.

This means that lzo_uint and unsigned long are not really
interchangeable (should have used size_t!). Fix the build
by using intermediate variables. The cairo-script file format
ensures that uncompressed data fits within 4GB.

Fixes -Wincompatible-pointer-types errors.
2026-05-01 11:29:29 +02:00
Luca Bacci
339b1580ea Meson: Fix compilation with CLangCL
Support for __uint128_t in CLangCL is currently broken [1].
Avoid using that type for now.

As of today MSVC doesn't support 128-bit integral types;
with this change we get feature-parity between MSVC and
CLangCL, so this shouldn't be a problem.

References:

 * Clang-cl generates a call to an undefined symbol __udivti3
   https://github.com/llvm/llvm-project/issues/25679
2026-05-01 10:21:43 +02:00
Uli Schlachter
c85d74aa5a Merge branch 'fdselect-range' into 'master'
Range-check FDSelect value

See merge request cairo/cairo!660
2026-04-24 14:21:53 +00:00
Uli Schlachter
d0323d9773 Merge branch 'reinstate-font-map-for-placeholders' into 'master'
_cairo_scaled_font_keys_equal: Also check implementation font-face

Closes #876

See merge request cairo/cairo!659
2026-04-24 14:20:15 +00:00
Jonathan Kew
d80b44afa4 Range-check FDSelect value during CFF subsetting. 2026-04-19 13:01:56 +01:00
Uli Schlachter
4ca0d581cb Merge branch 'master' into 'master'
[cff-subset] check subrs offset is within font data

See merge request cairo/cairo!657
2026-04-18 13:17:19 +00:00
Jonathan Kew
86365d847b [cff-subset] check subrs offset is within font data 2026-04-18 13:17:19 +00:00
Jonathan Kew
7dc050967f Merge branch cairo:master into master 2026-04-18 09:09:58 +00:00
Uli Schlachter
9df734c87a Merge branch 'add-polygon-oom' into 'master'
Ensure converter's jmp_buf is set up before adding edges.

See merge request cairo/cairo!658
2026-04-18 08:27:16 +00:00
Luca Bacci
46d1e26cdb _cairo_scaled_font_keys_equal: Also check implementation font-face
"Placeholder" scaled fonts created temporarily by cairo-user-font.c never
get to have an original_font_face (that is, it's always NULL). This breaks
the font-map mapping. Also check the implementation font-face.

Fixes #876
2026-04-17 11:47:29 +02:00
Jonathan Kew
86ae4233bf Ensure converter's jmp_buf is set up before adding edges.
It's possible for a pool allocation to fail under glitter_scan_converter_add_edge,
in which case longjmp will be called to bail out, but the converter's jmp_buf
hasn't been appropriately initialized to catch the error.
2026-04-15 14:24:09 +01:00
Jonathan Kew
899e6a89f7 [cff-subset] check subrs offset is within font data 2026-04-12 14:10:25 +00:00
Emmanuele Bassi
d3a35678a2 Merge branch 'recording-surface-finish-internal-helper' into 'master'
recording surface: Implement finish via reset

Closes #928

See merge request cairo/cairo!649
2026-03-03 13:59:07 +00:00
Luca Bacci
1adaf1e7c5 recording surface: Implement finish via reset
Rather than the other way round.

Fixes #928
2026-03-02 18:51:00 +01:00
Emmanuele Bassi
4fb80a9aef Merge branch 'test-fixes' into 'master'
Fix test runner on Windows and run tests in CI

Closes #887

See merge request cairo/cairo!609
2026-03-02 10:26:54 +00:00
Emmanuele Bassi
7cd2141f09 Merge branch 'dwrite' into 'master'
DWrite: Add support for COLRv1 fonts

Closes #903

See merge request cairo/cairo!625
2026-03-02 10:08:30 +00:00
Behdad Esfahbod
2a45892663 Merge branch 'rectangle-box-negative-extents' into 'master'
[matrix] Handle bounding-box extents overflow during transformation

See merge request cairo/cairo!645
2026-02-08 19:44:55 +00:00
Behdad Esfahbod
f0674b4c98 [rectanble Handle overflow in _cairo_box_from_doubles 2026-02-07 13:01:49 -07:00
Uli Schlachter
6b9e6dd0b3 Merge branch 'work/fix-leak-in-_cairo_pdf_surface_finish' into 'master'
_cairo_pdf_surface_finish: Fix leak in error conditions

See merge request cairo/cairo!644
2026-01-27 16:00:15 +00:00
Albert Astals Cid
b94bf30f03 _cairo_pdf_surface_finish: Fix leak in error conditions
Make sure surface->object_stream.stream is cleaned up even if things
failed

In poppler oss-fuzz tests we are getting this leak reported

Direct leak of 64 byte(s) in 1 object(s) allocated from:
	    #0 0x5747417eabd9 in __interceptor_calloc /src/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:74:3
	    #1 0x574742706f5b in _cairo_memory_stream_create cairo/src/cairo-output-stream.c:741:14
	    #2 0x5747426757b8 in _cairo_pdf_surface_open_object_stream cairo/src/cairo-pdf-surface.c:2307:34
	    #3 0x57474266b880 in _cairo_pdf_surface_finish cairo/src/cairo-pdf-surface.c:2700:14
	    #4 0x57474261afc6 in _cairo_surface_finish cairo/src/cairo-surface.c:1043:11
	    #5 0x57474261afc6 in cairo_surface_finish cairo/src/cairo-surface.c:1092:5
	    #6 0x57474270808a in _cairo_paginated_surface_finish cairo/src/cairo-paginated-surface.c:215:2
	    #7 0x5747426175c2 in _cairo_surface_finish cairo/src/cairo-surface.c:1043:11
	    #8 0x5747426175c2 in cairo_surface_destroy cairo/src/cairo-surface.c:978:2

This fixes it.

_cairo_pdf_surface_finish was succeeding past
_cairo_pdf_surface_open_object_stream that allocates surface->object_stream.stream,
failing when calling _cairo_pdf_surface_emit_font_subsets
and that memory was never freed
2026-01-24 11:37:50 +01:00
Luca Bacci
2050326dcc CI/MSVC: Exclude <builddir>/test/srcdir symlink from the artifacts
Otherwise latest GitLab fails with:

 > ERROR: Uploading artifacts as "archive" to coordinator... error
 >   error=couldn't execute POST against https://gitlab.freedesktop.org/api/v4/jobs/[...]/artifacts?artifact_format=zip[...]:
 >   Post "https://gitlab.freedesktop.org/api/v4/jobs/[...]/artifacts?artifact_format=zip[...]":
 >   read build/test/srcdir: Incorrect function. id=[...] token=[...]
2026-01-08 15:32:30 +01:00
Luca Bacci
1fdf7051d0 CI/MSVC: Build less
Avoid building subproject tests
2026-01-08 15:32:30 +01:00
Luca Bacci
30fdc7f338 CI: Do not store .git directory in artifacts
Otherwise gitlab-runner prints a few warnings:

 > Uploading artifacts...
 > WARNING: Part of .git directory is on the list of files to archive
 > WARNING: This may introduce unexpected problems
2026-01-08 15:32:30 +01:00
Luca Bacci
ce3a3e2d27 CI: Run tests on Windows 2026-01-08 15:32:30 +01:00
Luca Bacci
08dcac510b Tests/create-regions: skip if needed features are missing 2026-01-08 15:32:30 +01:00
Luca Bacci
15cb2d7acf Tests/font-variations: Cleanup resources in all cases
Otherwise the test runner detects leaks
2026-01-08 15:32:30 +01:00
Luca Bacci
1293ec674d Tests/pdf-operator-text: Check if pdf target is enabled
The same is done in pdf-mime-data.c
2026-01-08 15:32:30 +01:00
Luca Bacci
83e5d95ec2 Boilerplate/Win32: Switch to a DIB section
Thw Win32 boilerplate worked by creating an offscreen window
and creating a cairo surface that targets the client HDC.
However GDI clips the client HDC to the visible region of the
window, and that region is empty. In the end, every GDI drawing
operation turned into a no-op.

Rather than targeting HWNDs, it's much better to create a bitmap
(DIB Section) and draw via a memory HDC.

https://learn.microsoft.com/en-us/windows/win32/gdi/window-regions
https://devblogs.microsoft.com/oldnewthing/20030829-00/?p=42743
https://devblogs.microsoft.com/oldnewthing/20030902-00/?p=42693
2026-01-08 15:32:24 +01:00
Luca Bacci
2c354599a5 Boilerplate: Use backward slashes for system / popen commands on Windows
Both system() and popen() invoke the shell. Which shell is
invoked depends on the COMSPEC environment variable, but
usually it's CMD.exe.

CMD.exe doesn't quite like paths with forward slashes in its
command-line. Most of the times, the forward slash is mistaken
for a command line switch (the start of an option). For example:

  cmd /c "dir C:\Windows" works
  cmd /c "dir C:/Windows" doesn't work
2026-01-08 15:27:09 +01:00
Luca Bacci
626b3ab2f2 Boilerplate: Open pipe in binary mode on Windows
Open the pipe in binary mode on Windows to get the expected
byte counts. Note that the 'b' mode for popen is not portable
and so is used only on Windows:

> The behavior of popen() is specified for values of mode of "r",
> "w", "re", and "we". Other modes such as "rb" and "wb" might be
> supported by specific implementations, but these would not be
> portable features.

https://pubs.opengroup.org/onlinepubs/9799919799/functions/popen.html
2026-01-08 15:24:05 +01:00
Luca Bacci
652456af2d Meson: Use mklink to create the <builddir>/test/srcdir link on Windows
Create the directory symlink '<builddir>/test/srcdir' -> '<sourcedir>'
as done on UNIX with coreutils.
2026-01-08 15:23:33 +01:00
Uli Schlachter
200a02286b Merge branch 'patch-1' into 'master'
Add missing mutex cleanup in _cairo_recording_surface_finish

Closes #922

See merge request cairo/cairo!643
2025-12-20 06:29:18 +00:00
Alvin Wong
5833de29f3 Add missing mutex cleanup in _cairo_recording_surface_finish 2025-12-17 16:35:49 +00:00
Uli Schlachter
04656d7450 Merge branch 'tests-misc-fixes' into 'master'
Tests: Misc enhancements

See merge request cairo/cairo!634
2025-07-17 18:38:49 +00:00
Tim-Philipp Müller
6955595c60 Merge branch 'ci-macos-arm64' into 'master'
ci: add macOS arm64

See merge request cairo/cairo!498
2025-07-16 17:31:44 +00:00
Luca Bacci
a9e3eaccb8 CI: Add coverage-column-triangles to Quartz ignores
Fails with the following log:

Testing coverage-column-triangles with quartz target (dev offset 0 scale: 1)
963 pixels differ (with maximum difference of 9) from reference image
963 pixels differ (with maximum difference of 9) from reference image
OUTPUT: output/coverage-column-triangles.quartz.argb32.out.png
REFERENCE: ../../test/reference/coverage-column-triangles.ref.png
DIFFERENCE: output/coverage-column-triangles.quartz.argb32.diff.png
TEST: coverage-column-triangles TARGET: quartz FORMAT: argb32 OFFSET: 0 SCALE: 1 SIMILAR: 0 RESULT: FAIL
(...)
2025-07-16 11:52:45 +02:00
Luca Bacci
2e0713971f Update Quartz reference images 2025-07-16 11:52:45 +02:00
Tim-Philipp Müller
d371015d45 ci: add macOS arm64 2025-07-16 11:52:41 +02:00
Luca Bacci
355e421640 CI: Avoid running duplicated tests
...also simplifies .gitlab-ci.yml a bit
2025-07-15 14:28:27 +02:00
Luca Bacci
2b7ab8b895 Remove leftover scripts from the autotools build 2025-07-15 14:28:18 +02:00
Luca Bacci
471f8410a5 make-constructors.py: Sort tests list
This way cairo-test-suite works on sorted data
2025-07-15 14:27:15 +02:00
Emmanuele Bassi
8e9b856488 Merge branch 'win2k' into 'master'
win32: Fix MSVC build with dwrite disabled

See merge request cairo/cairo!618
2025-07-14 22:39:41 +00:00
Benjamin Gilbert
7a780896a1 win32: Fix MSVC build with dwrite disabled
We now require at least Windows Vista.  When dwrite is disabled, declare
WINVER accordingly so we get the defines we no longer carry ourselves.
The default dwrite-enabled path already has a new-enough WINVER.

Fixes: d0ee67a142 ("Win32: Remove unused code and defines for old toolchains")
2025-07-14 12:17:27 -07:00
Emmanuele Bassi
a4d5a24d60 Merge branch 'fix-msc-ver-compare' into 'master'
Check if _MSC_VER macro is defined

See merge request cairo/cairo!611
2025-07-14 14:42:26 +00:00
Emmanuele Bassi
6ac5348308 The GDI coordinate system is inverted compared to cairo's here, so the
delta-y value needs to be negated, otherwise glyph runs with non-zero 
y-advances will shift in the wrong direction.

See mozilla bug https://bugzilla.mozilla.org/show_bug.cgi?id=1962816 and
earlier https://bugzilla.mozilla.org/show_bug.cgi?id=454098 where this was
first discovered & fixed, but unfortunately was not upstreamed at that 
time.
2025-07-14 14:41:40 +00:00
Jonathan Kew
503505666f Fix sign of delta-y for ExtTextOutW 2025-07-14 14:41:40 +00:00
Luca Bacci
1aaa23aefb DWrite: Add support for COLRv1 fonts
Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/903
2025-07-14 16:34:07 +02:00