Commit graph

538 commits

Author SHA1 Message Date
Adrian Johnson
6967beb24e ps: fix max form size
Fixes: #845
2024-06-27 07:07:22 +09:30
Adrian Johnson
0cae2a4a74 Use _cairo_calloc() to allocate structs
To avoid any possibility of uninitialized memory.

The exceptions are:
 - where the allocation is immediately overwritten by a memcpy or struct copy.
 - arrays of structs to avoid any performance impact (except when the
   array is returned by the public API).
2024-06-21 10:32:23 +09:30
Adrian Johnson
8da24bf7fb Make _cairo_calloc() consistent with _cairo_malloc()
ie

  _cairo_calloc(size)
  _cairo_calloc_ab(a, size)
2024-06-21 08:53:01 +09:30
Adrian Johnson
b0b5562b9e Set CLOEXEC when opening files
Based on the patch by Christian Persch in #213.

Closes #213
2024-06-08 06:40:55 +09:30
Adrian Johnson
3715d93bdf Create _cairo_calloc() macro to replace calloc()
Not all platforms handle a zero sized allocation in calloc the
same. This macro ensures that _cairo_calloc(0) always returns NULL
similar to _cairo_malloc(0).
2024-05-21 20:20:49 +09:30
Sam James
c84a13c576
cairo-ps-surface: fix -Walloc-size
GCC 14 introduces a new -Walloc-size included in -Wextra which gives:
```
src/cairo-ps-surface.c:3524:18: warning: allocation of insufficient size ‘1’ for type ‘cairo_ps_form_t’ {aka ‘struct _cairo_ps_form’} with size ‘88’ [-Walloc-size]
```

The calloc prototype is:
```
void *calloc(size_t nmemb, size_t size);
```

So, just swap the number of members and size arguments to match the prototype, as
we're initialising 1 struct of size `sizeof(cairo_ps_form_t)`. GCC then sees we're not
doing anything wrong.

Signed-off-by: Sam James <sam@gentoo.org>
2023-11-05 22:09:21 +00:00
Khaled Hosny
06cda058f2 doc: Escape percent sign
Otherwise gtk-doc will eat one of them.
2023-02-02 14:13:56 +02:00
Adrian Johnson
79501baaa1 PDF Type 3 color fonts
This implements Type 3 color fonts for PDF for any font with a
CAIRO_SCALED_GLYPH_INFO_RECORDING_SURFACE. This includes user-fonts,
SVG fonts, and COLR fonts.

Glyphs with foreground colors are not yet implemented as Type 3 glyphs
and will be rendered as images by cairo-surface.
2023-01-29 18:08:42 +10:30
Adrian Johnson
5786d960e9 Mime type updates 2023-01-28 15:02:31 +10:30
Adrian Johnson
7146358250 Fix shared use of recording surface with paginated targets
The problem is _cairo_recording_surface_replay_and_create_regions()
stores the cairo_recording_region_type_t in the same structure as the
recording commands. This does not work well when the recording surface
is used as source by multiple surfaces

Fix this by moving the cairo_recording_region_type_t into a separate
struct cairo_recording_regions_array_t. This struct is stored in a
list that allows multiple create regions results to be store in the
surface.

The new function _cairo_recording_surface_region_array_attach() is
used to create a new cairo_recording_regions_array_t, attach it to the
recording surface and return a unique region id.

The _cairo_recording_surface_replay_and_create_regions() and
_cairo_recording_surface_replay_region() functions use this region id
to identify the cairo_recording_regions_array_t.

To handle nested recording surfaces, when replaying a recording, the
region id is passed to the target as an extra parameter in the surface
pattern. The wrapper surface makes a temporary copy of the pattern to
ensure the snapshot pattern in the recording surface is not modified.

cairo_recording_regions_array_t has a reference count so the target
can hold on to the cairo_recording_regions_array_t after the paginated
surface has called _cairo_recording_surface_region_array_remove().
2023-01-15 19:29:28 +10:30
Adrian Johnson
dc4a887e7f PS: Wrap embedded EPS in %%BeginDocument/%%EndDocument as required by EPS spec
Fixes #620
2023-01-12 07:32:44 +10:30
Adrian Johnson
13a0474641 Merge branch 'mingw-fixes' into 'master'
Fix mingw build failure when SVG fonts enabled

See merge request cairo/cairo!389
2023-01-03 19:03:50 +00:00
Adrian Johnson
f0ce8658f9 Fix user-font with foreground in group failures on image, PDF, and PS 2023-01-03 17:37:36 +10:30
Adrian Johnson
3d102f25c9 Use _cairo_strndup where appropriate 2023-01-03 16:01:51 +10:30
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
Ayman El Didi
a154424db3 fixed double free in _cairo_ps_surface_emit_base85_string
When taking the CAIRO_PS_COMPRESS_DEFLATE branch of the switch
statement in _cairo_ps_surface_emit_base85_string, memory is freed
a second time when closing the deflate_stream fails after performing a
write.

The status is now simply returned instead of attempting to free it
again.
2022-04-20 15:11:14 -06:00
Adrian Johnson
092da8a997 Add CAIRO_DEBUG_PS_NO_DATE env var to remove date from PS output
Fixes #537
2022-04-05 20:04:47 +09:30
luz paz
25d588e6c0 Fix typos in doxygen and source comments 2022-03-28 16:43:03 -04:00
Adrian Johnson
ca3e776abe Fix PS emit image for 16-bit images 2021-08-22 15:19:47 +09:30
Adrian Johnson
76331f654e Fix some mingw warnings and correct the value of R_OK 2021-08-07 15:44:21 +09:30
Adrian Johnson
0f18a873ef PS: ensure setup DSC comments are in BeginSetup section
Fixes #411
2021-07-23 19:10:55 +09:30
Adrian Johnson
cb0bfefba2 Update DSC documention
Fixes #380
2021-07-18 19:30:48 +09:30
luz.paz
6d93bddbd6 Misc. typos
Found via `codespell -i 3 -w -I ../cairo-word-whitelist.txt -L tim,ned,uint`
Follow up of 12cb59be7d

Reviewed-by: Bryce Harrington <bryce@bryceharrington.org>
2019-01-31 17:37:15 -08:00
Adrian Johnson
3c4570f8f4 ps: fix invalid matrix in eps embedding 2018-12-02 21:30:51 +10:30
Paul Menzel
15ad6ca3e1 Use HTTPS URLs for cairographics.org domains
Run the command below suggested by geirha in ##sed@irc.freenode.net.

    git grep -l 'http://.*cairographics.org' | xargs sed -i 's|http\(://\([[:alnum:].-]*\.\)\{0,1\}cairographics\.org\)|https\1|g'

Signed-off-by: Paul Menzel <pmenzel@molgen.mpg.de>
2018-10-16 10:03:01 -07:00
Adrian Johnson
1998239387 Use _cairo_malloc instead of malloc
_cairo_malloc(0) always returns NULL, but has not been used
consistently.  This patch replaces many calls to malloc() with
_cairo_malloc().

Fixes:  fdo# 101547
CVE: CVE-2017-9814 Heap buffer overflow at cairo-truetype-subset.c:1299
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2018-05-07 16:35:51 -07:00
Unknown
12cb59be7d Cairo trivial typos
Found using `codespell -q 3 -I cairo-whitelist.txt`
whereby whitelist contained:
```
amin
iff
lod
writen
```

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2018-04-02 17:46:58 -07:00
Adrian Johnson
f9cf6f9200 ps: fix compile warning
https://lists.cairographics.org/archives/cairo/2017-December/028481.html
2017-12-08 18:13:20 +10:30
Adrian Johnson
17e2abc992 ps: fix compile with old versions of MSVC
https://lists.cairographics.org/archives/cairo/2017-November/028452.html
2017-11-20 05:37:34 +10:30
Adrian Johnson
5c7a6ca141 ps: fix extend-*-similar failures 2017-11-10 20:10:01 +10:30
Adrian Johnson
9bfa9df2bb ps: fix padded image crash 2017-11-09 22:02:05 +10:30
Adrian Johnson
f7d6d78f94 ps: prevent self-copy infinite loop 2017-11-09 22:02:05 +10:30
Adrian Johnson
5ffbaf9e2f ps: add CAIRO_MIME_TYPE_EPS mime type for embedding EPS files 2017-11-09 22:02:05 +10:30
Adrian Johnson
7d3ba77b6c ps: use Reusable streams for forms in Level 3
to avoid emitting image data as strings
2017-11-09 22:01:40 +10:30
Adrian Johnson
b1c7a087b5 ps: use forms for surfaces with UNIQUE_ID mime type
to ensure the surfaces are emitted only once.

fixes mime-unique-id PS output
2017-11-09 22:01:40 +10:30
Adrian Johnson
638d64a702 ps: don't acquire image or snapshot in acquire_source_image_from_pattern
otherwise emit_surface may not see the mime data
2017-11-09 22:01:40 +10:30
Adrian Johnson
fcc037a76e ps: use << >> for dictionaries instead of dict begin end 2017-11-09 22:01:40 +10:30
Adrian Johnson
632232c3ce ps: remove unused prolog 2017-11-09 22:01:40 +10:30
Adrian Johnson
9d372ca91a ps: emit base85 strings instead of strings of base85
When image data is emitted as strings (required when an image is used
in a PaintProc), the base85 encoded data was emitted inside PS strings
(...) and the image filters included an ASCI85Decode filter.

This has been changed to emit the strings as ASCII85 strings <~...~>
and remove the ASCII85Decode filter since the base85 is decoded when
the string is parsed.

Also factor out the string data source procedure into the prolog.
2017-11-09 22:01:40 +10:30
Adrian Johnson
87dfd0c16f Allow mime image to be different size to cairo image
Previously it was assumed the mime image size is the same as the cairo
image surface size. When using the 1 bpp formats (CCITT, JBIG2),
creating a cairo image of the same size will have very large memory
requirements and in some case may exceed the pixman image size
limits. In these cases it is useful to allow the mime image to have a
different resolution to the cairo image and in the PDF/PS output scale
the mime image to be the same physical size as the cairo image.

In PDF, this is easy as all PDF images are scaled to 1x1 unit and the
CTM is used to scale the image to the required size. The PS surface
has been changed to also scale images to 1x1 and use the CTM to get
the required size.
2017-10-22 08:59:58 +10:30
Adrian Johnson
e1a02b180d Add CCITT_FAX mime type for PDF and PS surfaces
This completes the full set of PDF/PS image filters allowing image
data to be passed though without decompressing then recompresssing in
a less efficient format.

The difficulty with CCITT_FAX is it needs some decoding parameters
that are not stored inside the image data. This is achieved by using
an additional mime type CCITT_FAX_PARAMS that contains the params in
key=value format.
2017-10-22 08:42:36 +10:30
Adrian Johnson
1220e3c6b8 replace _BSD_SOURCE with _DEFAULT_SOURCE
fixes the warning:

warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"
2017-09-16 10:04:57 +09:30
Adrian Johnson
25da407a5f Support tag operations in analysis and paginated surface 2016-10-01 17:30:13 +09:30
Adrian Johnson
1a380ef5f3 ps/pdf: remove debug and commented out code 2016-07-15 22:03:04 +09:30
Adrian Johnson
0e6f7deac1 ps: flush ASCII85Decode file after use
If the image operator does not read all the ASCII85 data, the PS
interpreter will try to execute the next byte of unread data.

Define our own image operator that calls flushfile (reads until end of
file) on the filter after drawing the image.

https://bugs.freedesktop.org/show_bug.cgi?id=84811
2016-07-15 16:32:53 +09:30
Adrian Johnson
1c5ec6e380 Fix PS record-neg-extents test failure 2016-06-05 20:43:36 +09:30
Adrian Johnson
a14d319e43 ps: change from ps coordinates to cairo coordinates 2016-06-05 20:43:36 +09:30
Adrian Johnson
b1192beac7 Don't cull very thin lines on vector surfaces
On vector surfaces, use a minimum line width when calculating extents.

Bug 77298
2015-10-17 18:39:18 +10:30
Adrian Johnson
2215b4e0c0 ps: fix subsurface recordings 2015-10-17 18:16:32 +10:30
Adrian Johnson
6952e03262 ps: fix raster source patterns 2015-10-17 18:16:22 +10:30