Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/3756
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/56/3756/1
adapt to ICU patch https://ssl.icu-project.org/trac/ticket/10107
do not call LayoutEngine::reset()
Calling reset() disposes everything the LayoutEngine knows in its
current state. While this may have prevented some obscure crash during
exit in the past (call was added 2003-03-27), it definitely leads to a
crash if the updated LayoutEngine "patch"
http://download.icu-project.org/files/icu4c/51.1/icu-51-layout-fix-10107.tgz
is applied as that sets fGlyphStorage=NULL (it doesn't delete
LEGlyphStorage though and thus may leak, but that patch is in the wild
now) and a later call to mpIcuLE->layoutChars() tries to access
fGlyphStorage->...() if mpIcuLE is reused.
For the patch mentioned see
http://site.icu-project.org/download/51#TOC-Known-Issues and
http://bugs.icu-project.org/trac/ticket/10107
Change-Id: I1b8f5c446c174d7d12b896b3ecd2a266645e8abc
(cherry picked from commit 7de7267f4cfcb455aabb09053c7ed681d4591867)
implemented IcuFontFromServerFont::getFontTable(LETag,size_t&)
so that ICU versions trying to call
LEFontInstance::getFontTable(LETag,size_t&) actually call it instead of
IcuFontFromServerFont::getFontTable(LETag)
See http://site.icu-project.org/download/51#TOC-Known-Issues
"NOTE: Applications must implement LEFontInstance::getFontTable(LETag,
size_t &length) in their LEFontInstance subclasses, so that ICU can
properly bounds-check font tables."
See also https://ssl.icu-project.org/trac/ticket/10107
(cherry picked from commit 428bde3591ff2fd2195097040dbe1480f1f4210f)
Conflicts:
vcl/generic/glyphs/gcach_layout.cxx
Change-Id: Ic20b7e8dda4e84734eb6de0ccba82b0dea481d55
---
M vcl/generic/glyphs/gcach_layout.cxx
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/vcl/generic/glyphs/gcach_layout.cxx b/vcl/generic/glyphs/gcach_layout.cxx
index ef03aa3..32f0887 100644
--- a/vcl/generic/glyphs/gcach_layout.cxx
+++ b/vcl/generic/glyphs/gcach_layout.cxx
@@ -200,6 +200,7 @@
: mrServerFont( rFont )
{}
+ virtual const void* getFontTable(LETag tableTag, size_t &length) const;
virtual const void* getFontTable(LETag tableTag) const;
virtual le_int32 getUnitsPerEM() const;
virtual float getXPixelsPerEm() const;
@@ -220,7 +221,7 @@
// -----------------------------------------------------------------------
-const void* IcuFontFromServerFont::getFontTable( LETag nICUTableTag ) const
+const void* IcuFontFromServerFont::getFontTable( LETag nICUTableTag, size_t & rLength ) const
{
char pTagName[5];
pTagName[0] = (char)(nICUTableTag >> 24);
@@ -229,8 +230,9 @@
pTagName[3] = (char)(nICUTableTag);
pTagName[4] = 0;
- sal_uLong nLength;
+ sal_uLong nLength = 0;
const unsigned char* pBuffer = mrServerFont.GetTable( pTagName, &nLength );
+ rLength = static_cast<size_t>(nLength);
#ifdef VERBOSE_DEBUG
fprintf(stderr,"IcuGetTable(\"%s\") => %p\n", pTagName, pBuffer);
int mnHeight = mrServerFont.GetFontSelData().mnHeight;
@@ -238,6 +240,12 @@
fprintf(stderr,"font( h=%d, \"%s\" )\n", mnHeight, pName );
#endif
return (const void*)pBuffer;
+}
+
+const void* IcuFontFromServerFont::getFontTable( LETag nICUTableTag ) const
+{
+ size_t nLength = 0;
+ return getFontTable( nICUTableTag, nLength);
}
// -----------------------------------------------------------------------
@@ -475,7 +483,6 @@
mpIcuLE->getGlyphs( pIcuGlyphs, rcIcu );
mpIcuLE->getCharIndices( pCharIndices, rcIcu );
mpIcuLE->getGlyphPositions( &pGlyphPositions->fX, rcIcu );
- mpIcuLE->reset(); // TODO: get rid of this, PROBLEM: crash at exit when removed
if( LE_FAILURE(rcIcu) )
return false;
--
To view, visit https://gerrit.libreoffice.org/3756
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic20b7e8dda4e84734eb6de0ccba82b0dea481d55
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-3-6
Gerrit-Owner: Eike Rathke <erack@redhat.com>
Context
- [PATCH libreoffice-3-6] adapt to ICU patch https://ssl.icu-project.org/trac/ticket/1... · Eike Rathke (via Code Review)
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.