# https://ssl.icu-project.org/trac/changeset/37086 Index: icu/source/layout/ContextualSubstSubtables.cpp =================================================================== --- icu/source/layout/ContextualSubstSubtables.cpp (revision 37085) +++ icu/source/layout/ContextualSubstSubtables.cpp (revision 37086) @@ -1,4 +1,4 @@ /* - * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved * */ @@ -467,4 +467,10 @@ (const ChainSubClassRuleTable *) ((char *) chainSubClassSetTable + chainSubClassRuleTableOffset); le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount); + + // TODO: Ticket #11557 - enable this check, originally from ticket #11525. + // Depends on other, more extensive, changes. + // LEReferenceToArrayOf backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount); + if( LE_FAILURE(success) ) { return 0; } + le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1; const le_uint16 *inputClassArray = &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1]; Index: icu/source/layout/CursiveAttachmentSubtables.cpp =================================================================== --- icu/source/layout/CursiveAttachmentSubtables.cpp (revision 37085) +++ icu/source/layout/CursiveAttachmentSubtables.cpp (revision 37086) @@ -1,4 +1,4 @@ /* - * (C) Copyright IBM Corp. 1998 - 2013 - All Rights Reserved + * (C) Copyright IBM Corp. 1998 - 2015 - All Rights Reserved * */ @@ -21,5 +21,8 @@ le_uint16 eeCount = SWAPW(entryExitCount); - if (coverageIndex < 0 || coverageIndex >= eeCount) { + LEReferenceToArrayOf + entryExitRecordsArrayRef(base, success, entryExitRecords, coverageIndex); + + if (coverageIndex < 0 || coverageIndex >= eeCount || LE_FAILURE(success)) { glyphIterator->setCursiveGlyph(); return 0; Index: icu/source/layout/Features.cpp =================================================================== --- icu/source/layout/Features.cpp (revision 37085) +++ icu/source/layout/Features.cpp (revision 37086) @@ -2,5 +2,5 @@ * @(#)Features.cpp 1.4 00/03/15 * - * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved * */ @@ -16,4 +16,7 @@ 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(); Index: icu/source/layout/LETableReference.h =================================================================== --- icu/source/layout/LETableReference.h (revision 37085) +++ icu/source/layout/LETableReference.h (revision 37086) @@ -2,5 +2,5 @@ * -*- c++ -*- * - * (C) Copyright IBM Corp. and others 2013 - All Rights Reserved + * (C) Copyright IBM Corp. and others 2015 - All Rights Reserved * * Range checking @@ -314,5 +314,10 @@ const T& getObject(le_uint32 i, LEErrorCode &success) const { - return *getAlias(i,success); + const T *ret = getAlias(i, success); + if (LE_FAILURE(success) || ret==NULL) { + return *(new T(0)); + } else { + return *ret; + } } Index: icu/source/layout/LigatureSubstSubtables.cpp =================================================================== --- icu/source/layout/LigatureSubstSubtables.cpp (revision 37085) +++ icu/source/layout/LigatureSubstSubtables.cpp (revision 37086) @@ -1,4 +1,4 @@ /* - * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved * */ @@ -28,4 +28,7 @@ const LigatureTable *ligTable = (const LigatureTable *) ((char *)ligSetTable + ligTableOffset); 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); Index: icu/source/layout/MultipleSubstSubtables.cpp =================================================================== --- icu/source/layout/MultipleSubstSubtables.cpp (revision 37085) +++ icu/source/layout/MultipleSubstSubtables.cpp (revision 37086) @@ -1,5 +1,5 @@ /* * - * (C) Copyright IBM Corp. 1998-2013 - All Rights Reserved + * (C) Copyright IBM Corp. 1998-2015 - All Rights Reserved * */ @@ -36,5 +36,10 @@ le_int32 coverageIndex = getGlyphCoverage(base, glyph, success); le_uint16 seqCount = SWAPW(sequenceCount); + LEReferenceToArrayOf + sequenceTableOffsetArrayRef(base, success, sequenceTableOffsetArray, seqCount); + if (LE_FAILURE(success)) { + return 0; + } if (coverageIndex >= 0 && coverageIndex < seqCount) { Offset sequenceTableOffset = SWAPW(sequenceTableOffsetArray[coverageIndex]);