# HG changeset patch # User prr # Date 1410455416 25200 # Node ID 16e96997b7fadaa11b022a3d1c4380f3217fbacb # Parent 47d9b4eb8fad9a3c9f8fc1ae6ff55174e1ef6a90 8055489: Better substitution formats Reviewed-by: srl, bae, mschoene diff -r 47d9b4eb8fad -r 16e96997b7fa jdk/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp --- a/jdk/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp Thu Sep 11 13:04:18 2014 +0400 +++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/ContextualSubstSubtables.cpp Thu Sep 11 10:10:16 2014 -0700 @@ -583,6 +583,8 @@ LEReferenceTo chainSubClassRuleTable(chainSubClassSetTable, success, chainSubClassRuleTableOffset); le_uint16 backtrackGlyphCount = SWAPW(chainSubClassRuleTable->backtrackGlyphCount); + LEReferenceToArrayOf backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount); + if( LE_FAILURE(success) ) { return 0; } le_uint16 inputGlyphCount = SWAPW(chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount]) - 1; LEReferenceToArrayOf inputClassArray(base, success, &chainSubClassRuleTable->backtrackClassArray[backtrackGlyphCount + 1],inputGlyphCount+2); // +2 for the lookaheadGlyphCount count le_uint16 lookaheadGlyphCount = SWAPW(inputClassArray.getObject(inputGlyphCount, success)); @@ -599,8 +601,6 @@ } tempIterator.prev(); - LEReferenceToArrayOf backtrackClassArray(base, success, chainSubClassRuleTable->backtrackClassArray, backtrackGlyphCount); - if( LE_FAILURE(success) ) { return 0; } if (! matchGlyphClasses(backtrackClassArray, backtrackGlyphCount, &tempIterator, backtrackClassDefinitionTable, success, TRUE)) { continue; diff -r 47d9b4eb8fad -r 16e96997b7fa jdk/src/java.desktop/share/native/libfontmanager/layout/LETableReference.h --- a/jdk/src/java.desktop/share/native/libfontmanager/layout/LETableReference.h Thu Sep 11 13:04:18 2014 +0400 +++ b/jdk/src/java.desktop/share/native/libfontmanager/layout/LETableReference.h Thu Sep 11 10:10:16 2014 -0700 @@ -470,7 +470,12 @@ #endif 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; + } } /**