[cairo-commit] 3 commits - .gitlab-ci/ignore-ps2-argb32.txt .gitlab-ci/ignore-ps2-rgb24.txt .gitlab-ci/ignore-ps3-argb32.txt .gitlab-ci/ignore-ps3-rgb24.txt .gitlab-ci.yml src/cairo-ps-surface.c test/cairo-test-runner.c

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 28 10:52:58 UTC 2022


 .gitlab-ci.yml                   |   22 +++
 .gitlab-ci/ignore-ps2-argb32.txt |  207 +++++++++++++++++++++++++++++++++++++
 .gitlab-ci/ignore-ps2-rgb24.txt  |  197 +++++++++++++++++++++++++++++++++++
 .gitlab-ci/ignore-ps3-argb32.txt |  218 +++++++++++++++++++++++++++++++++++++++
 .gitlab-ci/ignore-ps3-rgb24.txt  |  209 +++++++++++++++++++++++++++++++++++++
 src/cairo-ps-surface.c           |    2 
 test/cairo-test-runner.c         |   14 ++
 7 files changed, 867 insertions(+), 2 deletions(-)

New commits:
commit 2351a65b2754ecc54bb394495da93da3cb3977c6
Merge: 0e56ea9d5 a2d05a0c3
Author: Uli Schlachter <psychon at znc.in>
Date:   Wed Dec 28 10:52:56 2022 +0000

    Merge branch 'test-ps' into 'master'
    
    Test cairo-ps in CI
    
    See merge request cairo/cairo!171

commit a2d05a0c344e7a0239e4a95332d6b364a3c852e2
Author: Uli Schlachter <psychon at znc.in>
Date:   Sun Aug 15 18:26:53 2021 +0200

    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 at znc.in>

diff --git a/.gitlab-ci/ignore-ps2-argb32.txt b/.gitlab-ci/ignore-ps2-argb32.txt
index a2eb631e0..75c599fc4 100644
--- a/.gitlab-ci/ignore-ps2-argb32.txt
+++ b/.gitlab-ci/ignore-ps2-argb32.txt
@@ -161,6 +161,7 @@ rounded-rectangle-fill
 rounded-rectangle-stroke
 scale-offset-image
 scale-offset-similar
+self-copy-overlap
 stroke-ctm-caps
 stroke-clipped
 stroke-image
diff --git a/.gitlab-ci/ignore-ps3-argb32.txt b/.gitlab-ci/ignore-ps3-argb32.txt
index ee227c8f7..9e433d5c3 100644
--- a/.gitlab-ci/ignore-ps3-argb32.txt
+++ b/.gitlab-ci/ignore-ps3-argb32.txt
@@ -172,6 +172,7 @@ rounded-rectangle-fill
 rounded-rectangle-stroke
 scale-offset-image
 scale-offset-similar
+self-copy-overlap
 stroke-ctm-caps
 stroke-clipped
 stroke-image
diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c
index 5645aae4a..343a5ea05 100644
--- a/src/cairo-ps-surface.c
+++ b/src/cairo-ps-surface.c
@@ -3713,11 +3713,11 @@ _cairo_ps_surface_emit_surface (cairo_ps_surface_t          *surface,
 
 	status = _cairo_memory_stream_destroy (surface->stream, &data, &length);
 	free (data);
+	surface->stream = old_stream;
 	if (unlikely (status))
 	    return status;
 
 	params->approx_size = length;
-	surface->stream = old_stream;
 	_cairo_pdf_operators_set_stream (&surface->pdf_operators,
 					 surface->stream);
     }
commit c1aaaff880863419a08d44687451e5422d6090c3
Author: Uli Schlachter <psychon at znc.in>
Date:   Sun Aug 15 18:12:04 2021 +0200

    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 at znc.in>

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5f3ff2396..cc7a9e3d7 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -8,7 +8,7 @@ include:
 variables:
   FDO_UPSTREAM_REPO: 'cairo/cairo'
   FDO_DISTRIBUTION_VERSION: '34'
-  FDO_DISTRIBUTION_TAG: '2021-08-26.0'
+  FDO_DISTRIBUTION_TAG: '2021-09-20.0'
 
   # TODO: should probably get its own image at some point instead of reusing the GStreamer one
   # See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/.gitlab-image-tags.yml for latest
@@ -73,6 +73,8 @@ fedora image:
       librsvg2-devel
       gtk2-devel
       poppler-glib-devel
+      libspectre-devel
+      ghostscript
       pixman-devel
       systemd-devel
       systemd-udev
@@ -138,6 +140,24 @@ test fedora autotools pdf:
     - export CAIRO_TEST_TARGET=pdf
     - xvfb-run make check V=1 VERBOSE=1
 
+test fedora autotools ps2:
+  extends: '.test fedora autotools'
+  script:
+    - export CAIRO_TEST_IGNORE_ps2_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-argb32.txt)
+    - export CAIRO_TEST_IGNORE_ps2_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps2-rgb24.txt)
+    - export CAIRO_TEST_TARGET=ps2
+    - export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1
+    - xvfb-run make check V=1 VERBOSE=1
+
+test fedora autotools ps3:
+  extends: '.test fedora autotools'
+  script:
+    - export CAIRO_TEST_IGNORE_ps3_argb32=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-argb32.txt)
+    - export CAIRO_TEST_IGNORE_ps3_rgb24=$(tr '\n' ',' < .gitlab-ci/ignore-ps3-rgb24.txt)
+    - export CAIRO_TEST_TARGET=ps3
+    - export CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES=1
+    - xvfb-run make check V=1 VERBOSE=1
+
 test fedora autotools script:
   extends: '.test fedora autotools'
   script:
diff --git a/.gitlab-ci/ignore-ps2-argb32.txt b/.gitlab-ci/ignore-ps2-argb32.txt
new file mode 100644
index 000000000..a2eb631e0
--- /dev/null
+++ b/.gitlab-ci/ignore-ps2-argb32.txt
@@ -0,0 +1,206 @@
+arc-direction
+arc-looping-dash
+bug-448
+bug-51910
+bug-bo-ricotz
+bug-extents
+bug-spline
+caps
+caps-05
+caps-1
+caps-2
+caps-joins
+caps-joins-05
+caps-joins-1
+caps-joins-2
+caps-joins-curve
+caps-sub-paths
+caps-tails-curve
+clear-source
+clip-complex-bug61592
+clip-disjoint
+clip-fill
+clip-fill-rule
+clip-group-shapes-circles
+clip-image
+clip-nesting
+clip-push-group
+clip-rotate-image-surface-paint
+clip-shape
+clip-stroke
+clip-text
+clip-twice
+clip-unbounded
+close-path
+close-path-current-point
+copy-path
+culled-glyphs
+curve-to-as-line-to
+dash-caps-joins
+dash-curve
+dash-infinite-loop
+dash-no-dash
+dash-offset
+dash-offset-negative
+dash-scale
+dash-state
+dash-zero-length
+degenerate-arc
+degenerate-curve-to
+degenerate-dash
+degenerate-path
+degenerate-pen
+degenerate-rel-curve-to
+degenerate-solid-dash
+drunkard-tails
+extend-reflect
+extend-reflect-similar
+extended-blend
+extended-blend-alpha-mask
+extended-blend-solid
+fallback
+fill-and-stroke
+fill-degenerate-sort-order
+fill-image
+fill-rule
+filter-nearest-offset
+finer-grained-fallbacks
+font-matrix-translation
+ft-color-font
+ft-text-vertical-layout-type1
+ft-text-vertical-layout-type3
+group-unaligned
+hairline
+hairline-anisotropic
+hairline-anisotropic-incorrect
+hairline-big
+hairline-scaled
+halo
+halo-transform
+horizontal-clip
+inverse-text
+joins
+joins-loop
+joins-retrace
+joins-star
+large-font
+leaky-dash
+leaky-dashed-rectangle
+leaky-dashed-stroke
+leaky-polygon
+line-width
+line-width-large-overlap-dashed
+line-width-overlap
+line-width-overlap-dashed
+line-width-overlap-flipped
+line-width-overlap-flopped
+line-width-overlap-offset
+line-width-scale
+line-width-tolerance
+long-dashed-lines
+miter-precision
+new-sub-path
+operator-www
+over-above-source
+over-around-source
+over-below-source
+over-between-source
+overlapping-glyphs
+path-append
+path-stroke-twice
+pixman-downscale-fast-95
+pixman-downscale-nearest-95
+pixman-rotate
+pthread-same-source
+radial-gradient
+radial-gradient-mask
+radial-gradient-mask-source
+random-clip
+random-intersections-curves-eo
+random-intersections-curves-nz
+random-intersections-eo
+random-intersections-nonzero
+record-extend-reflect
+record-neg-extents-bounded
+record-neg-extents-unbounded
+record-replay-extend-reflect
+record-replay-extend-repeat
+record-select-font-face
+record-self-intersecting
+record-text-transform
+record1414x-fill-alpha
+record1414x-select-font-face
+record1414x-self-intersecting
+record1414x-text-transform
+record2x-select-font-face
+record2x-self-intersecting
+record2x-text-transform
+record90-select-font-face
+record90-self-intersecting
+record90-text-transform
+recordflip-select-font-face
+recordflip-self-intersecting
+recordflip-text-transform
+recordflip-whole-select-font-face
+recordflip-whole-self-intersecting
+recordflip-whole-text-transform
+rectilinear-dash
+rectilinear-dash-scale
+rectilinear-dash-scale-unaligned
+rectilinear-grid
+rectilinear-miter-limit
+rectilinear-stroke
+reflected-stroke
+rotate-clip-image-surface-paint
+rotate-image-surface-paint
+rotate-stroke-box
+rotated-clip
+round-join-bug-520-bevel
+round-join-bug-520-round
+rounded-rectangle-fill
+rounded-rectangle-stroke
+scale-offset-image
+scale-offset-similar
+stroke-ctm-caps
+stroke-clipped
+stroke-image
+stroke-open-box
+select-font-face
+self-copy-overlap
+self-intersecting
+shape-general-convex
+shape-sierpinski
+show-glyphs-advance
+show-text-current-point
+smask
+smask-text
+smp-glyph
+spline-decomposition
+stroke-clipped
+stroke-ctm-caps
+stroke-image
+stroke-open-box
+surface-pattern
+surface-pattern-scale-down
+surface-pattern-scale-down-extend-reflect
+surface-pattern-scale-up
+text-glyph-range
+text-pattern
+text-rotate
+text-transform
+text-unhinted-metrics
+thin-lines
+tiger
+transforms
+trap-clip
+twin
+unclosed-strokes
+user-font
+user-font-color
+user-font-mask
+user-font-proxy
+user-font-rescale
+user-font-subpixel
+world-map
+world-map-fill
+world-map-stroke
diff --git a/.gitlab-ci/ignore-ps2-rgb24.txt b/.gitlab-ci/ignore-ps2-rgb24.txt
new file mode 100644
index 000000000..0ca0b8b45
--- /dev/null
+++ b/.gitlab-ci/ignore-ps2-rgb24.txt
@@ -0,0 +1,197 @@
+arc-direction
+arc-looping-dash
+bug-361
+bug-431
+bug-448
+bug-51910
+bug-bo-ricotz
+bug-extents
+bug-spline
+caps
+caps-05
+caps-1
+caps-2
+caps-joins
+caps-joins-05
+caps-joins-1
+caps-joins-2
+caps-joins-curve
+caps-sub-paths
+caps-tails-curve
+clear-source
+clip-complex-bug61592
+clip-fill
+clip-fill-rule
+clip-group-shapes-circles
+clip-image
+clip-nesting
+clip-push-group
+clip-rotate-image-surface-paint
+clip-shape
+clip-stroke
+clip-text
+clip-twice
+close-path
+close-path-current-point
+copy-path
+culled-glyphs
+curve-to-as-line-to
+dash-caps-joins
+dash-curve
+dash-infinite-loop
+dash-no-dash
+dash-offset
+dash-offset-negative
+dash-scale
+dash-state
+dash-zero-length
+degenerate-arc
+degenerate-curve-to
+degenerate-dash
+degenerate-path
+degenerate-pen
+degenerate-rel-curve-to
+degenerate-solid-dash
+drunkard-tails
+extend-reflect
+extend-reflect-similar
+extended-blend-alpha-mask
+fill-and-stroke
+fill-degenerate-sort-order
+fill-image
+fill-rule
+filter-nearest-offset
+font-matrix-translation
+ft-color-font
+ft-text-vertical-layout-type1
+ft-text-vertical-layout-type3
+gradient-constant-alpha
+gradient-zero-stops
+group-unaligned
+hairline
+hairline-anisotropic
+hairline-anisotropic-incorrect
+hairline-big
+hairline-scaled
+halo
+halo-transform
+horizontal-clip
+image-surface-source
+inverse-text
+joins
+joins-loop
+joins-retrace
+joins-star
+large-font
+leaky-dash
+leaky-dashed-rectangle
+leaky-dashed-stroke
+leaky-polygon
+line-width
+line-width-large-overlap-dashed
+line-width-overlap
+line-width-overlap-dashed
+line-width-overlap-flipped
+line-width-overlap-flopped
+line-width-overlap-offset
+line-width-scale
+line-width-tolerance
+long-dashed-lines
+miter-precision
+new-sub-path
+overlapping-glyphs
+path-append
+path-stroke-twice
+pdf-surface-source
+pixman-downscale-fast-95
+pixman-downscale-nearest-95
+pixman-rotate
+ps-surface-source
+pthread-same-source
+radial-gradient-source
+random-intersections-curves-eo
+random-intersections-curves-nz
+random-intersections-eo
+random-intersections-nonzero
+record-extend-reflect
+record-neg-extents-bounded
+record-neg-extents-unbounded
+record-replay-extend-reflect
+record-replay-extend-repeat
+record-select-font-face
+record-self-intersecting
+record-text-transform
+record1414x-fill-alpha
+record1414x-select-font-face
+record1414x-self-intersecting
+record1414x-text-transform
+record2x-select-font-face
+record2x-self-intersecting
+record2x-text-transform
+record90-select-font-face
+record90-self-intersecting
+record90-text-transform
+recordflip-select-font-face
+recordflip-self-intersecting
+recordflip-text-transform
+recordflip-whole-select-font-face
+recordflip-whole-self-intersecting
+recordflip-whole-text-transform
+rectilinear-dash
+rectilinear-dash-scale
+rectilinear-dash-scale-unaligned
+rectilinear-grid
+rectilinear-miter-limit
+rectilinear-stroke
+reflected-stroke
+rel-path
+rotate-clip-image-surface-paint
+rotate-image-surface-paint
+rotate-stroke-box
+round-join-bug-520-bevel
+round-join-bug-520-round
+rounded-rectangle-fill
+rounded-rectangle-stroke
+scale-offset-image
+scale-offset-similar
+scale-source-surface-paint
+select-font-face
+self-intersecting
+set-source
+shape-general-convex
+shape-sierpinski
+show-glyphs-advance
+show-text-current-point
+smask
+smask-text
+smp-glyph
+source-surface-scale-paint
+spline-decomposition
+stroke-clipped
+stroke-ctm-caps
+stroke-image
+stroke-open-box
+surface-pattern
+surface-pattern-scale-down
+surface-pattern-scale-down-extend-reflect
+surface-pattern-scale-up
+text-glyph-range
+text-pattern
+text-rotate
+text-transform
+text-unhinted-metrics
+thin-lines
+tiger
+transforms
+twin
+unclosed-strokes
+user-font
+user-font-mask
+user-font-proxy
+user-font-rescale
+user-font-subpixel
+world-map
+world-map-fill
+world-map-stroke
+xcb-surface-source
+xlib-surface-source
diff --git a/.gitlab-ci/ignore-ps3-argb32.txt b/.gitlab-ci/ignore-ps3-argb32.txt
new file mode 100644
index 000000000..ee227c8f7
--- /dev/null
+++ b/.gitlab-ci/ignore-ps3-argb32.txt
@@ -0,0 +1,217 @@
+arc-direction
+arc-looping-dash
+bug-448
+bug-51910
+bug-bo-ricotz
+bug-extents
+bug-image-compositor
+bug-spline
+caps
+caps-05
+caps-1
+caps-2
+caps-joins
+caps-joins-05
+caps-joins-1
+caps-joins-2
+caps-joins-curve
+caps-sub-paths
+caps-tails-curve
+clear-source
+clip-complex-bug61592
+clip-disjoint
+clip-fill
+clip-fill-rule
+clip-group-shapes-circles
+clip-image
+clip-nesting
+clip-push-group
+clip-rotate-image-surface-paint
+clip-shape
+clip-stroke
+clip-text
+clip-twice
+clip-unbounded
+close-path
+close-path-current-point
+copy-path
+culled-glyphs
+curve-to-as-line-to
+dash-caps-joins
+dash-curve
+dash-infinite-loop
+dash-no-dash
+dash-offset
+dash-offset-negative
+dash-scale
+dash-state
+dash-zero-length
+degenerate-arc
+degenerate-curve-to
+degenerate-dash
+degenerate-path
+degenerate-pen
+degenerate-rel-curve-to
+degenerate-solid-dash
+drunkard-tails
+extend-reflect
+extend-reflect-similar
+extended-blend
+extended-blend-alpha-mask
+extended-blend-solid
+fallback
+fill-and-stroke
+fill-degenerate-sort-order
+fill-image
+fill-rule
+filter-nearest-offset
+filter-nearest-transformed
+finer-grained-fallbacks
+font-matrix-translation
+ft-color-font
+ft-text-vertical-layout-type1
+ft-text-vertical-layout-type3
+gradient-constant-alpha
+group-unaligned
+hairline
+hairline-anisotropic
+hairline-anisotropic-incorrect
+hairline-big
+hairline-scaled
+halo
+halo-transform
+horizontal-clip
+inverse-text
+joins
+joins-loop
+joins-retrace
+joins-star
+large-font
+leaky-dash
+leaky-dashed-rectangle
+leaky-dashed-stroke
+leaky-polygon
+line-width
+line-width-large-overlap-dashed
+line-width-overlap
+line-width-overlap-dashed
+line-width-overlap-flipped
+line-width-overlap-flopped
+line-width-overlap-offset
+line-width-scale
+line-width-tolerance
+linear-gradient
+linear-gradient-reflect
+linear-gradient-subset
+long-dashed-lines
+mask-transformed-image
+mesh-pattern-conical
+mesh-pattern-control-points
+mesh-pattern-fold
+mesh-pattern-overlap
+miter-precision
+new-sub-path
+operator-www
+over-around-source
+over-below-source
+overlapping-glyphs
+path-append
+path-stroke-twice
+pixman-downscale-fast-95
+pixman-downscale-nearest-95
+pixman-rotate
+pthread-same-source
+push-group-color
+radial-gradient
+radial-gradient-mask
+radial-gradient-mask-source
+radial-gradient-one-stop
+random-clip
+random-intersections-curves-eo
+random-intersections-curves-nz
+random-intersections-eo
+random-intersections-nonzero
+record-extend-reflect
+record-neg-extents-bounded
+record-neg-extents-unbounded
+record-replay-extend-reflect
+record-replay-extend-repeat
+record-select-font-face
+record-self-intersecting
+record-text-transform
+record1414x-fill-alpha
+record1414x-select-font-face
+record1414x-self-intersecting
+record1414x-text-transform
+record2x-select-font-face
+record2x-self-intersecting
+record2x-text-transform
+record90-select-font-face
+record90-self-intersecting
+record90-text-transform
+recordflip-select-font-face
+recordflip-self-intersecting
+recordflip-text-transform
+recordflip-whole-select-font-face
+recordflip-whole-self-intersecting
+recordflip-whole-text-transform
+rectilinear-dash
+rectilinear-dash-scale
+rectilinear-dash-scale-unaligned
+rectilinear-grid
+rectilinear-miter-limit
+rectilinear-stroke
+reflected-stroke
+rotate-clip-image-surface-paint
+rotate-image-surface-paint
+rotate-stroke-box
+rotated-clip
+round-join-bug-520-bevel
+round-join-bug-520-round
+rounded-rectangle-fill
+rounded-rectangle-stroke
+scale-offset-image
+scale-offset-similar
+stroke-ctm-caps
+stroke-clipped
+stroke-image
+stroke-open-box
+select-font-face
+self-copy-overlap
+self-intersecting
+shape-general-convex
+shape-sierpinski
+show-glyphs-advance
+show-text-current-point
+smask
+smask-text
+smp-glyph
+spline-decomposition
+stroke-clipped
+stroke-ctm-caps
+stroke-image
+stroke-open-box
+surface-pattern
+surface-pattern-scale-down
+surface-pattern-scale-down-extend-reflect
+surface-pattern-scale-up
+text-glyph-range
+text-pattern
+text-rotate
+text-transform
+text-unhinted-metrics
+thin-lines
+tiger
+transforms
+trap-clip
+twin
+unclosed-strokes
+user-font
+user-font-color
+user-font-mask
+user-font-proxy
+user-font-rescale
+user-font-subpixel
+world-map
+world-map-fill
+world-map-stroke
diff --git a/.gitlab-ci/ignore-ps3-rgb24.txt b/.gitlab-ci/ignore-ps3-rgb24.txt
new file mode 100644
index 000000000..c4c6a0362
--- /dev/null
+++ b/.gitlab-ci/ignore-ps3-rgb24.txt
@@ -0,0 +1,209 @@
+arc-direction
+arc-looping-dash
+bug-361
+bug-431
+bug-448
+bug-51910
+bug-bo-ricotz
+bug-extents
+bug-image-compositor
+bug-spline
+caps
+caps-05
+caps-1
+caps-2
+caps-joins
+caps-joins-05
+caps-joins-1
+caps-joins-2
+caps-joins-curve
+caps-sub-paths
+caps-tails-curve
+clear-source
+clip-complex-bug61592
+clip-fill
+clip-fill-rule
+clip-group-shapes-circles
+clip-image
+clip-nesting
+clip-push-group
+clip-rotate-image-surface-paint
+clip-shape
+clip-stroke
+clip-text
+clip-twice
+close-path
+close-path-current-point
+copy-path
+culled-glyphs
+curve-to-as-line-to
+dash-caps-joins
+dash-curve
+dash-infinite-loop
+dash-no-dash
+dash-offset
+dash-offset-negative
+dash-scale
+dash-state
+dash-zero-length
+degenerate-arc
+degenerate-curve-to
+degenerate-dash
+degenerate-path
+degenerate-pen
+degenerate-rel-curve-to
+degenerate-solid-dash
+drunkard-tails
+extend-reflect
+extend-reflect-similar
+extended-blend-alpha-mask
+fill-and-stroke
+fill-degenerate-sort-order
+fill-image
+fill-rule
+filter-nearest-offset
+filter-nearest-transformed
+font-matrix-translation
+ft-color-font
+ft-text-vertical-layout-type1
+ft-text-vertical-layout-type3
+gradient-zero-stops
+group-unaligned
+hairline
+hairline-anisotropic
+hairline-anisotropic-incorrect
+hairline-big
+hairline-scaled
+halo
+halo-transform
+horizontal-clip
+image-surface-source
+inverse-text
+joins
+joins-loop
+joins-retrace
+joins-star
+large-font
+leaky-dash
+leaky-dashed-rectangle
+leaky-dashed-stroke
+leaky-polygon
+line-width
+line-width-large-overlap-dashed
+line-width-overlap
+line-width-overlap-dashed
+line-width-overlap-flipped
+line-width-overlap-flopped
+line-width-overlap-offset
+line-width-scale
+line-width-tolerance
+linear-gradient
+linear-gradient-reflect
+linear-gradient-subset
+long-dashed-lines
+mask-transformed-image
+mesh-pattern-conical
+mesh-pattern-control-points
+mesh-pattern-fold
+mesh-pattern-overlap
+miter-precision
+new-sub-path
+overlapping-glyphs
+path-append
+path-stroke-twice
+pdf-surface-source
+pixman-downscale-fast-95
+pixman-downscale-nearest-95
+pixman-rotate
+ps-surface-source
+pthread-same-source
+push-group-color
+radial-gradient-one-stop
+radial-gradient-source
+random-intersections-curves-eo
+random-intersections-curves-nz
+random-intersections-eo
+random-intersections-nonzero
+record-extend-reflect
+record-neg-extents-bounded
+record-neg-extents-unbounded
+record-replay-extend-reflect
+record-replay-extend-repeat
+record-select-font-face
+record-self-intersecting
+record-text-transform
+record1414x-fill-alpha
+record1414x-select-font-face
+record1414x-self-intersecting
+record1414x-text-transform
+record2x-select-font-face
+record2x-self-intersecting
+record2x-text-transform
+record90-select-font-face
+record90-self-intersecting
+record90-text-transform
+recordflip-select-font-face
+recordflip-self-intersecting
+recordflip-text-transform
+recordflip-whole-select-font-face
+recordflip-whole-self-intersecting
+recordflip-whole-text-transform
+rectilinear-dash
+rectilinear-dash-scale
+rectilinear-dash-scale-unaligned
+rectilinear-grid
+rectilinear-miter-limit
+rectilinear-stroke
+reflected-stroke
+rel-path
+rotate-clip-image-surface-paint
+rotate-image-surface-paint
+rotate-stroke-box
+round-join-bug-520-bevel
+round-join-bug-520-round
+rounded-rectangle-fill
+rounded-rectangle-stroke
+scale-offset-image
+scale-offset-similar
+scale-source-surface-paint
+select-font-face
+self-intersecting
+set-source
+shape-general-convex
+shape-sierpinski
+show-glyphs-advance
+show-text-current-point
+smask
+smask-text
+smp-glyph
+source-surface-scale-paint
+spline-decomposition
+stroke-clipped
+stroke-ctm-caps
+stroke-image
+stroke-open-box
+surface-pattern
+surface-pattern-scale-down
+surface-pattern-scale-down-extend-reflect
+surface-pattern-scale-up
+text-glyph-range
+text-pattern
+text-rotate
+text-transform
+text-unhinted-metrics
+thin-lines
+tiger
+transforms
+trap-clip
+twin
+unclosed-strokes
+user-font
+user-font-mask
+user-font-proxy
+user-font-rescale
+user-font-subpixel
+world-map
+world-map-fill
+world-map-stroke
+xcb-surface-source
+xlib-surface-source
diff --git a/test/cairo-test-runner.c b/test/cairo-test-runner.c
index 05d04b78e..7e8b10cd7 100644
--- a/test/cairo-test-runner.c
+++ b/test/cairo-test-runner.c
@@ -942,6 +942,20 @@ main (int argc, char **argv)
 
 	if (ctx.test->preamble != NULL) {
 	    status = _cairo_test_runner_preamble (&runner, &ctx);
+	    if (getenv ("CAIRO_TEST_UGLY_HACK_TO_IGNORE_PS_FAILURES")) {
+		if (strcmp (ctx.test_name, "ps-eps") == 0 || strcmp (ctx.test_name, "fallback-resolution") == 0) {
+		    if (status == CAIRO_TEST_FAILURE) {
+			cairo_test_log (&ctx, "Turning FAIL into XFAIL due to env\n");
+			fprintf (stderr, "Turning FAIL into XFAIL due to env\n");
+			runner.num_ignored_via_env++;
+			status = CAIRO_TEST_XFAILURE;
+		    } else {
+			fprintf (stderr, "Test was expected to fail due to an environment variable, but did not!\n");
+			fprintf (stderr, "Please update the corresponding CAIRO_TEST_IGNORE_* variable.\n");
+			status = CAIRO_TEST_ERROR;
+		    }
+		}
+	    }
 	    switch (status) {
 	    case CAIRO_TEST_SUCCESS:
 		in_preamble = TRUE;


More information about the cairo-commit mailing list