Bug 24797 (mnuhn)

Summary: cairo-path-stroke.c:1816: _cairo_rectilinear_stroker_line_to: Assertion `a->x == b->x || a->y == b->y' failed.
Product: cairo Reporter: Malte Nuhn <malte.nuhn>
Component: generalAssignee: Carl Worth <cworth>
Status: RESOLVED FIXED QA Contact: cairo-bugs mailing list <cairo-bugs>
Severity: normal    
Priority: medium    
Version: 1.9.5   
Hardware: x86 (IA32)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments: Trace that leads to the Assertion failure.

Description Malte Nuhn 2009-10-29 17:24:02 UTC
Created attachment 30820 [details]
Trace that leads to the Assertion failure.

The given combination of commands leads to the following assertion failure:

lt-csi-replay: cairo-path-stroke.c:1816: _cairo_rectilinear_stroker_line_to: Assertion `a->x == b->x || a->y == b->y' failed.

I noticed this by plotting a lot of small graphs, which basically only differ in the y-coordinates. If this is really a problem with cairo, this will strongly depend on the (x,y) coordinates of the moveto/lineto commands.
Comment 1 Chris Wilson 2009-10-30 01:13:18 UTC
Thanks for bug report, having the trace was very useful, many many thanks.

commit 23bcf91748c4bb04c16e503b913da3bfc237463f
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Fri Oct 30 07:49:56 2009 +0000

    path: Misclassification of rectilinear after degenerate line-to
    
    Malte Nuhn reported hitting an assertion:
    
      cairo-path-stroke.c:1816: _cairo_rectilinear_stroker_line_to: Assertion `a->x == b->x || a->y == b->y' failed.
      http://bugs.freedesktop.org/show_bug.cgi?id=24797
    
    when stroking an apparently simple path:
    
      0 8.626485 m
      0 8.626485 l
      5.208333 2.5 l
      10.416667 2.5 l
      15.625 2.5 l
      20.833333 2.5 l
      26.041667 2.5 l
      31.25 2.5 l
      36.458333 2.5 l
      41.666667 2.5 l
      46.875 2.5 l
      52.083333 2.5 l
      57.291667 2.5 l
      62.5 2.5 l
      67.708333 2.5 l
      72.916667 2.5 l
      78.125 2.5 l
      83.333333 2.5 l
      88.541667 2.5 l
      93.75 2.5 l
      98.958333 2.5 l
      104.166667 2.5 l
      109.375 2.5 l
      114.583333 2.5 l
      119.791667 2.5 l
      125 2.5 l
      stroke
    
    which upon reduction becomes:
    
      0.000000 8.625000 m 5.207031 2.500000 l 125.000000 2.500000 l stroke
    
    The bug is that after spotting a repeated line-to we move the previous
    end-point without reclassifying the path, hence we miss the
    non-rectilinear step.

Hope this hasn't marred your enjoyment of Cairo, and you continue to have fun!

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.