Prevent crash when setting up a stencil-based clip

Bug #8177690

Clear the layers before we setup the stencil to avoid dereferencing
the recently deleted rects.

Change-Id: I5dce5f965672f276f9490636d85b6018d3ab9422
This commit is contained in:
Romain Guy
2013-02-11 18:01:20 -08:00
parent f16c7a9754
commit e67307c816
2 changed files with 9 additions and 3 deletions

View File

@@ -1179,6 +1179,10 @@ void OpenGLRenderer::clearLayerRegions() {
delete bounds;
}
// We must clear the list of dirty rects before we
// call setupDraw() to prevent stencil setup to do
// the same thing again
mLayers.clear();
setupDraw(false);
setupDrawColor(0.0f, 0.0f, 0.0f, 1.0f);
@@ -1195,9 +1199,8 @@ void OpenGLRenderer::clearLayerRegions() {
for (uint32_t i = 0; i < count; i++) {
delete mLayers.itemAt(i);
}
mLayers.clear();
}
mLayers.clear();
}
///////////////////////////////////////////////////////////////////////////////

View File

@@ -189,7 +189,10 @@ void Font::drawCachedGlyph(CachedGlyphInfo* glyph, float x, float hOffset, float
vOffset += glyph->mBitmapTop + height;
SkPoint destination[4];
measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent);
bool ok = measure.getPosTan(x + hOffset + glyph->mBitmapLeft + halfWidth, position, tangent);
if (!ok) {
ALOGW("The path for drawTextOnPath is empty or null");
}
// Move along the tangent and offset by the normal
destination[0].set(-tangent->fX * halfWidth - tangent->fY * vOffset,