Kaydet (Commit) 708050dc authored tarafından Michael Stahl's avatar Michael Stahl

vcl: OutputDevice::GetTextArray() should always init pDXAry

CppunitTest_writerperfect_writer file libmwaw/pass/Acta_1.0.hqx uses the
font "Courier", and for unknown reasons we can't properly load that
font, because the PhysicalFontFamily::mpFirst for "courier" is null.

This causes OutputDevice::GetTextArray() to fail to create a SalLayout
and return early before initializing the passed pDXAry, which then
generates lots of DrMemory warnings.

Let's hope the callers are happy about an all-0 pDXAry.

Change-Id: I07b29a59660cf5cd060fd77da5d96021f9d8f9f5
(cherry picked from commit e6e409b6)
üst 8dec5745
......@@ -1006,7 +1006,7 @@ long OutputDevice::GetTextArray( const OUString& rStr, long* pDXAry,
}
if( nIndex >= rStr.getLength() )
return 0;
return 0; // TODO: this looks like a buggy caller?
if( nLen < 0 || nIndex + nLen >= rStr.getLength() )
{
......@@ -1016,7 +1016,19 @@ long OutputDevice::GetTextArray( const OUString& rStr, long* pDXAry,
SalLayout *const pSalLayout = ImplLayout(rStr, nIndex, nLen,
Point(0,0), 0, nullptr, SalLayoutFlags::NONE, pLayoutCache);
if( !pSalLayout )
{
// The caller expects this to init the elements of pDXAry.
// Adapting all the callers to check that GetTextArray succeeded seems
// too much work.
// Init here to 0 only in the (rare) error case, so that any missing
// element init in the happy case will still be found by tools,
// and hope that is sufficient.
if (pDXAry)
{
memset(pDXAry, 0, nLen * sizeof(*pDXAry));
}
return 0;
}
#if VCL_FLOAT_DEVICE_PIXEL
std::unique_ptr<DeviceCoordinate[]> pDXPixelArray;
if(pDXAry)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment