author | Anthony Jones <ajones@mozilla.com> |
Wed, 05 Sep 2012 17:52:34 -0400 | |
changeset 104342 | f9922b42205abb3191f5012ba0196f9ef837f393 |
parent 104341 | 6268138eb19d0b482f694ff65d1cf07d994ed2c6 |
child 104343 | 013743bb609ef214d6bad4e64bd46863a5b0450f |
push id | 14464 |
push user | ryanvm@gmail.com |
push date | Wed, 05 Sep 2012 21:52:38 +0000 |
treeherder | mozilla-inbound@013743bb609e [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | roc |
bugs | 786913 |
milestone | 18.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
new file mode 100644 --- /dev/null +++ b/content/canvas/crashtests/0px-size-font-shadow.html @@ -0,0 +1,17 @@ +<!DOCTYPE HTML> +<body> +<canvas id="canv" width="5" height="5"></canvas> +<script> +var canv = document.getElementById("canv"); +var ctx = canv.getContext("2d"); + +ctx.fillStyle = "red"; +// 0 size font shouldn't assert! +ctx.font = "0px Arial"; +ctx.shadowColor = '#f00'; +ctx.shadowBlur = 4; +ctx.fillText("A", 0, 0); +document.documentElement.className = ""; +</script> +</body> +</html>
--- a/content/canvas/crashtests/crashtests.list +++ b/content/canvas/crashtests/crashtests.list @@ -1,14 +1,15 @@ load 360293-1.html load 421715-1.html load 553938-1.html load 647480.html load 727547.html load 0px-size-font-667225.html +load 0px-size-font-shadow.html load texImage2D.html load 729116.html load 745699-1.html load 746813-1.html # this test crashes in a bunch places still #load 745818-large-source.html load 743499-negative-size.html load 767337-1.html
--- a/content/canvas/src/nsCanvasRenderingContext2DAzure.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2DAzure.cpp @@ -3211,16 +3211,26 @@ nsCanvasRenderingContext2DAzure::DrawOrM } isRTL = canvasStyle->GetStyleVisibility()->mDirection == NS_STYLE_DIRECTION_RTL; } else { isRTL = GET_BIDI_OPTION_DIRECTION(document->GetBidiOptions()) == IBMBIDI_TEXTDIRECTION_RTL; } + gfxFontGroup* currentFontStyle = GetCurrentFontStyle(); + NS_ASSERTION(currentFontStyle, "font group is null"); + + if (currentFontStyle->GetStyle()->size == 0.0F) { + if (aWidth) { + *aWidth = 0; + } + return NS_OK; + } + const ContextState &state = CurrentState(); // This is only needed to know if we can know the drawing bounding box easily. bool doDrawShadow = aOp == TEXT_DRAW_OPERATION_FILL && NeedToDrawShadow(); nsCanvasBidiProcessorAzure processor; GetAppUnitsValues(&processor.mAppUnitsPerDevPixel, nullptr); @@ -3229,21 +3239,18 @@ nsCanvasRenderingContext2DAzure::DrawOrM new gfxContext(gfxPlatform::GetPlatform()->ScreenReferenceSurface()); Matrix matrix = mTarget->GetTransform(); processor.mThebes->SetMatrix(gfxMatrix(matrix._11, matrix._12, matrix._21, matrix._22, matrix._31, matrix._32)); processor.mCtx = this; processor.mOp = aOp; processor.mBoundingBox = gfxRect(0, 0, 0, 0); processor.mDoMeasureBoundingBox = doDrawShadow || !mIsEntireFrameInvalid; processor.mState = &CurrentState(); + processor.mFontgrp = currentFontStyle; - - processor.mFontgrp = GetCurrentFontStyle(); - NS_ASSERTION(processor.mFontgrp, "font group is null"); - nscoord totalWidthCoord; // calls bidi algo twice since it needs the full text width and the // bounding boxes before rendering anything nsBidi bidiEngine; rv = nsBidiPresUtils::ProcessText(textToDraw.get(), textToDraw.Length(), isRTL ? NSBIDI_RTL : NSBIDI_LTR,