DirectWrite font engine: don't leak the font table buffer
Ideally, each TryGetFontTable() call sequence should be followed by the call to ReleaseFontTable() with the context value taken from the first TryGetFontTable() call, otherwise we'll leak the buffer allocated for the font table. Change-Id: I627bf0133b7f61798e82929723ccfb780ce9ee69 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>bb10
parent
d53f5db953
commit
02aee5d174
|
|
@ -225,6 +225,8 @@ QFixed QFontEngineDirectWrite::lineThickness() const
|
|||
|
||||
bool QFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, uint *length) const
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
if (m_directWriteFontFace) {
|
||||
DWORD t = qbswap<quint32>(tag);
|
||||
|
||||
|
|
@ -237,26 +239,22 @@ bool QFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, uint *len
|
|||
);
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
if (!exists)
|
||||
return false;
|
||||
|
||||
if (buffer == 0) {
|
||||
*length = tableSize;
|
||||
return true;
|
||||
} else if (*length < tableSize) {
|
||||
return false;
|
||||
if (exists) {
|
||||
if (!buffer) {
|
||||
*length = tableSize;
|
||||
ret = true;
|
||||
} else if (*length >= tableSize) {
|
||||
memcpy(buffer, tableData, tableSize);
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(buffer, tableData, tableSize);
|
||||
m_directWriteFontFace->ReleaseFontTable(tableContext);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
qErrnoWarning("QFontEngineDirectWrite::getSfntTableData: TryGetFontTable failed");
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
QFixed QFontEngineDirectWrite::emSquareSize() const
|
||||
|
|
|
|||
|
|
@ -254,6 +254,8 @@ QFixed QWindowsFontEngineDirectWrite::lineThickness() const
|
|||
|
||||
bool QWindowsFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, uint *length) const
|
||||
{
|
||||
bool ret = false;
|
||||
|
||||
if (m_directWriteFontFace) {
|
||||
DWORD t = qbswap<quint32>(tag);
|
||||
|
||||
|
|
@ -266,26 +268,22 @@ bool QWindowsFontEngineDirectWrite::getSfntTableData(uint tag, uchar *buffer, ui
|
|||
);
|
||||
|
||||
if (SUCCEEDED(hr)) {
|
||||
if (!exists)
|
||||
return false;
|
||||
|
||||
if (buffer == 0) {
|
||||
*length = tableSize;
|
||||
return true;
|
||||
} else if (*length < tableSize) {
|
||||
return false;
|
||||
if (exists) {
|
||||
if (!buffer) {
|
||||
*length = tableSize;
|
||||
ret = true;
|
||||
} else if (*length >= tableSize) {
|
||||
memcpy(buffer, tableData, tableSize);
|
||||
ret = true;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(buffer, tableData, tableSize);
|
||||
m_directWriteFontFace->ReleaseFontTable(tableContext);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
qErrnoWarning("%s: TryGetFontTable failed", __FUNCTION__);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
return ret;
|
||||
}
|
||||
|
||||
QFixed QWindowsFontEngineDirectWrite::emSquareSize() const
|
||||
|
|
|
|||
Loading…
Reference in New Issue