Commit graph

8279 commits

Author SHA1 Message Date
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
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
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
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
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
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
f0674b4c98 [rectanble Handle overflow in _cairo_box_from_doubles 2026-02-07 13:01:49 -07: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
Alvin Wong
5833de29f3 Add missing mutex cleanup in _cairo_recording_surface_finish 2025-12-17 16:35:49 +00: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
Luca Bacci
457ab827c9 Add definition for IDWriteFactory8 2025-07-14 16:34:06 +02:00
Luca Bacci
2a306f8e5f Always include dwrite-extra.hpp 2025-07-14 16:34:05 +02:00
Luca Bacci
53c3702686 dwrite-extra.hpp: Fix check for mingw-w64 workaround 2025-07-14 16:34:04 +02:00
Luca Bacci
02763155e8 dwrite-extra.hpp: Rework a bit 2025-07-14 16:34:03 +02:00
Luca Bacci
27411659d8 Rename dwrite / d2d1 polyfill headers to .hpp extension
They are only usable from C++ now
2025-07-14 16:34:02 +02:00
Luca Bacci
6ec91df76e Check which ID2D1DeviceContext subclasses are defined in d2d1_3.h
...and make d2d1-extra.h provide the missing definitions
2025-07-14 16:34:01 +02:00
Luca Bacci
306396ff53 Add definitions for ID2D1DeviceContext7 in d2d1-extra.h
We're going to make use of ID2D1DeviceContext7::DrawPaintGlyphRun()
for COLRv1 fonts.
2025-07-14 16:33:59 +02:00
Luca Bacci
b1bc5a73f6 DWrite: don't set component-alpha for A8 mask
It was just a copy-paste leftover. Component-alpha makes sense
only for color images.
2025-07-14 16:33:59 +02:00
Luca Bacci
7f82b13fbf Fix typo 2025-07-14 16:33:58 +02:00
Luca Bacci
c7a3e6c519 Check if _MSC_VER macro is defined
Original patch from MSYS2:
https://github.com/msys2/MINGW-packages/blob/36dd8e0bdf/mingw-w64-cairo/0030-ucrt-clang-fixes.patch
2025-07-14 15:53:52 +02:00
Uli Schlachter
2f21b3874c Merge branch 'fix-clipping-crash' into 'master'
Fix a crash in the clipping code

See merge request cairo/cairo!622
2025-07-14 13:01:46 +00:00
Uli Schlachter
55cb75c4df Merge branch 'winsdk_26100_fix' into 'master'
Add check for clang to cairo attribute handling code

See merge request cairo/cairo!612
2025-07-05 09:02:29 +00:00
Luca Bacci
76a0978d7b Fix check for InitOnceComplete failure
...also include <windows.h>

Fixes ff4f2f43
2025-07-02 13:26:00 +02:00
Ryan VanderMeulen
ef42ed0ec8 Add check for clang to cairo attribute handling code 2025-07-01 12:14:08 -04:00
Tim-Philipp Müller
0bf0265009 Merge branch 'compiler-features' into 'master'
Rework compiler features detection

See merge request cairo/cairo!627
2025-07-01 12:32:05 +00:00
Luca Bacci
d4f1ba74d0 Win32: Fix init once condition
Fixes !626
2025-06-19 10:15:37 +02:00
Tim-Philipp Müller
3ffb6d5c07 Merge branch 'win32-fixes' into 'master'
Win32 Fixes

Closes #897

See merge request cairo/cairo!626
2025-06-16 17:15:07 +00:00
Luca Bacci
6989158f4c Drop support for very old GCC versions
They don't support C11 anyway. Additionally, CLang defines a very
conservative __GNUC__ value (which is also configurable via the
-fgnuc-version= command-line argument)
2025-06-16 18:52:39 +02:00
Luca Bacci
ff4f2f4301 Win32: Implement init_once with InitOnceBeginInitialize / InitOnceComplete 2025-06-16 18:50:13 +02:00
Luca Bacci
ee554c8610 DWrite: Fix switch for grid-fit mode
Ooops!
2025-06-16 17:52:15 +02:00
Luca Bacci
d9a11c3736 Win32: Use cairo_atomic_once_t to initialize TLS slot
We were using the double-checked locking pattern, which requires
memory fences to be safe on architectures with weak memory
guarantess (e.g ARM64)

Fixes https://gitlab.freedesktop.org/cairo/cairo/-/issues/897
2025-06-16 17:51:53 +02:00
Matthias Clasen
1d3347a690 Fix a crash in the clipping code
When cairo_is_all_clipped return true, we must not attempt
to change any of the clip fields, since it is pointing to
the static const __cairo_clip_all.

Moving the check for ->region into the 'if' is fine, since
it will always be NULL for _cairo_clip_all.

This was causing a crash in inkscape, see
https://gitlab.com/inkscape/inkscape/-/issues/5631
2025-05-28 18:12:16 -04:00
correctmost
a1c31f5ed5 xcb: Fix a -Wuse-after-free=3 warning with GCC
Closes #898
2025-05-26 21:20:15 -04:00
Emmanuele Bassi
22206ba5dd Post-release version bump to 1.18.5 2025-03-08 13:23:25 +00:00
Emmanuele Bassi
4541e0cd3a Release Cairo 1.18.4 2025-03-08 13:23:25 +00:00
Luca Bacci
4d141f08fb DWrite: Add fallback for OS versions up to Windows 8
IDWriteGlyphRunAnalysis supports gray-scale antialiasing only when
created via IDWriteFactory2 (and newer), introduced in Windows 8.1

Fallback to using DIrect2D on A8 targets when IDWriteFactory2 is
not available.
2025-02-10 17:18:46 +01:00
Luca Bacci
78fca779ba DWrite: Get glyph coverage using IDWriteGlyphRunAnalysis 2025-02-10 17:18:40 +01:00
Emmanuele Bassi
fe87f1c3fb Merge branch 'win32-cleanup' into 'master'
Win32 cleanup

See merge request cairo/cairo!605
2025-01-30 09:29:01 +00:00
Emmanuele Bassi
e2a52c0870 Merge branch 'dwrite-font-variations' into 'master'
DWrite: Add support for font variations

Closes #877

See merge request cairo/cairo!601
2025-01-30 09:26:49 +00:00
Emmanuele Bassi
ed7b0a54b9 Merge branch 'dwrite-fix-warnings' into 'master'
DWrite: Fix warnings

See merge request cairo/cairo!603
2025-01-30 09:25:57 +00:00
Luca Bacci
e0287e09f4 DWrite/GeometryRecorder: Add final specifier 2025-01-21 13:55:27 +01:00