vcl: crash in GraphiteLayout::expandOrCondense:

When printing the bugdoc from i#103958:

    error: attempt to subscript container with out-of-bounds index 5, but
    container only holds 5 elements.

#4  0x00007fd37902be5e in GraphiteLayout::expandOrCondense (this=0x35296a8, rArgs=...) at vcl/source/glyphs/graphite_layout.cxx:848
#5  0x00007fd37902bc54 in GraphiteLayout::AdjustLayout (this=0x35296a8, rArgs=...) at vcl/source/glyphs/graphite_layout.cxx:812
#6  0x00007fd3790345c8 in GraphiteServerFontLayout::AdjustLayout (this=0x3529640, rArgs=...) at vcl/inc/graphite_serverfont.hxx:76
#7  0x00007fd378d5c91d in OutputDevice::forceFallbackFontToFit (this=0x35022c0, rFallback=..., rFallbackFont=..., rFontSelData=..., nFallbackLevel=1, rLayoutArgs=..., rOrigMetric=...) at vcl/source/gdi/outdev3.cxx:6094
#8  0x00007fd378d5cece in OutputDevice::ImplGlyphFallbackLayout (this=0x35022c0, pSalLayout=0x36136c0, rLayoutArgs=...) at vcl/source/gdi/outdev3.cxx:6206
#9  0x00007fd378d5c6fe in OutputDevice::ImplLayout (this=0x35022c0, rOrigStr="\327\252\327\220\327\250\327\231\327\232:__________", nMinIndex=0, nLen=5, rLogicalPos=..., nLogicalWidth=570, pDXArray=0x0, bFilter=true) at vcl/source/gdi/outdev3.cxx:6065
#10 0x00007fd378d5b9da in OutputDevice::DrawStretchText (this=0x35022c0, rStartPt=..., nWidth=570, rStr="\327\252\327\220\327\250\327\231\327\232:__________", nIndex=0, nLen=5) at vcl/source/gdi/outdev3.cxx:5840
#11 0x00007fd378d27f1e in MetaStretchTextAction::Execute (this=0x3588880, pOut=0x35022c0) at vcl/source/gdi/metaact.cxx:1482
#12 0x00007fd378cdbea5 in GDIMetaFile::Play (this=0x7ffff63e7da0, pOut=0x35022c0, nPos=1283) at vcl/source/gdi/gdimtf.cxx:424
#13 0x00007fd378ea1c6f in vcl::PrinterController::printFilteredPage (this=0x34ff550, i_nPage=10) at vcl/source/gdi/print3.cxx:1207
This commit is contained in:
Michael Stahl 2012-02-22 23:48:52 +01:00
parent 617c914016
commit d066f7e4af

View file

@ -843,7 +843,7 @@ void GraphiteLayout::expandOrCondense(ImplLayoutArgs &rArgs)
assert(nCharIndex > -1);
mvCharDxs[nCharIndex-mnMinCharPos] += nOffset;
// adjust char dxs for rest of characters in cluster
while (++nCharIndex < static_cast<int>(mvGlyph2Char.size()))
while (++nCharIndex < static_cast<int>(mvChar2BaseGlyph.size()))
{
int nChar2Base = mvChar2BaseGlyph[nCharIndex-mnMinCharPos];
if (nChar2Base == -1 || nChar2Base == static_cast<int>(i))