Bug 172866

Summary: Object bounding box wrong for some paths
Product: WebKit Reporter: Simon Fraser (smfr) <simon.fraser>
Component: SVGAssignee: Simon Fraser (smfr) <simon.fraser>
Status: RESOLVED FIXED    
Severity: Normal CC: commit-queue, dino, simon.fraser, thorton, zimmermann
Priority: P2    
Version: WebKit Nightly Build   
Hardware: Unspecified   
OS: Unspecified   
URL: https://codepen.io/AmeliaBR/details/dRyPJE/
Attachments:
Description Flags
Testcase
none
Better testcase
none
Patch none

Comment 1 Simon Fraser (smfr) 2017-06-02 16:17:54 PDT
Created attachment 311881 [details]
Testcase
Comment 2 Simon Fraser (smfr) 2017-06-02 16:47:45 PDT
Created attachment 311884 [details]
Better testcase
Comment 3 Simon Fraser (smfr) 2017-06-02 17:25:50 PDT
RenderSVGShape::calculateObjectBoundingBox() is calling path().fastBoundingRect() which, on macOS, calls CGPathGetBoundingBox(). The comments say:

/* Return the bounding box of `path'. The bounding box is the smallest
   rectangle completely enclosing all points in the path, including control
   points for Bézier cubic and quadratic curves. If the path is empty, then
   return `CGRectNull'. */

We should instead use:

/* Return the path bounding box of `path'. The path bounding box is the
   smallest rectangle completely enclosing all points in the path, *not*
   including control points for Bézier cubic and quadratic curves. If the
   path is empty, then return `CGRectNull'. */

CG_EXTERN CGRect CGPathGetPathBoundingBox(CGPathRef path);

but need to vet all callers of Path::fastBoundingRect().
Comment 4 Simon Fraser (smfr) 2017-06-02 17:36:02 PDT
See also https://trac.webkit.org/changeset/99460/webkit
Comment 5 Simon Fraser (smfr) 2017-06-04 09:47:58 PDT
Created attachment 311965 [details]
Patch
Comment 6 WebKit Commit Bot 2017-06-04 10:57:08 PDT
Comment on attachment 311965 [details]
Patch

Clearing flags on attachment: 311965

Committed r217772: <http://trac.webkit.org/changeset/217772>
Comment 7 WebKit Commit Bot 2017-06-04 10:57:10 PDT
All reviewed patches have been landed.  Closing bug.