# HG changeset patch # User prr # Date 1410456451 25200 # Node ID 2dfb4ef6c76dd32c998eecb85ed2cddb838c5465 # Parent d9bd9218443492f973ec494b78b823027419119a 8056276: Fontmanager feature improvements Reviewed-by: srl, bae, mschoene diff -r d9bd92184434 -r 2dfb4ef6c76d src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp --- a/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Thu Sep 11 10:27:25 2014 -0700 +++ b/src/share/native/sun/font/layout/CursiveAttachmentSubtables.cpp Thu Sep 11 10:27:31 2014 -0700 @@ -45,6 +45,9 @@ le_int32 coverageIndex = getGlyphCoverage(base, glyphID, success); le_uint16 eeCount = SWAPW(entryExitCount); + LEReferenceToArrayOf + entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex); + if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) { glyphIterator->setCursiveGlyph(); return 0; diff -r d9bd92184434 -r 2dfb4ef6c76d src/share/native/sun/font/layout/Features.cpp --- a/src/share/native/sun/font/layout/Features.cpp Thu Sep 11 10:27:25 2014 -0700 +++ b/src/share/native/sun/font/layout/Features.cpp Thu Sep 11 10:27:31 2014 -0700 @@ -40,6 +40,9 @@ LEReferenceTo FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const { + LEReferenceToArrayOf + featureRecordArrayRef(base, success, featureRecordArray, featureIndex); + if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) { return LEReferenceTo(); } diff -r d9bd92184434 -r 2dfb4ef6c76d src/share/native/sun/font/layout/LigatureSubstSubtables.cpp --- a/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Thu Sep 11 10:27:25 2014 -0700 +++ b/src/share/native/sun/font/layout/LigatureSubstSubtables.cpp Thu Sep 11 10:27:31 2014 -0700 @@ -64,6 +64,9 @@ LEReferenceTo ligTable(ligSetTable, success, ligTableOffset); if(LE_FAILURE(success)) { return 0; } le_uint16 compCount = SWAPW(ligTable->compCount) - 1; + LEReferenceToArrayOf + componentArrayRef(base, success, ligTable->componentArray, compCount); + if (LE_FAILURE(success)) { return 0; } le_int32 startPosition = glyphIterator->getCurrStreamPosition(); TTGlyphID ligGlyph = SWAPW(ligTable->ligGlyph); le_uint16 comp; diff -r d9bd92184434 -r 2dfb4ef6c76d src/share/native/sun/font/layout/MultipleSubstSubtables.cpp --- a/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Thu Sep 11 10:27:25 2014 -0700 +++ b/src/share/native/sun/font/layout/MultipleSubstSubtables.cpp Thu Sep 11 10:27:31 2014 -0700 @@ -61,6 +61,8 @@ le_int32 coverageIndex = getGlyphCoverage(base, glyph, success); le_uint16 seqCount = SWAPW(sequenceCount); + LEReferenceToArrayOf + sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount); if (LE_FAILURE(success)) { return 0;