CanvasRenderingContext2D::drawTextInternal() uses the computed textRect as the size of the mask image created for painting text stroke with a gradient or pattern. textRect is too small if stroking text, because it does not take the bounds of the stroke into account; it fails to account for miters etc.
Created attachment 26351 [details] Testcase
Maybe Path::strokeBoundingRect() can help here. We moved it from SVG to Path. See SVGPaintServer.cpp and RenderObject.cpp for the usage.
Other platforms don't use clipToImageBuffer anymore. That means it's only a CG related bug. My last suggestion can't work here. Text's are no paths :-P But why using clipToImageBuffer for both, gradients and pattern. We just need it for gradients, right?
<rdar://problem/70824500>