ICU-10684 merge in Layout updates

Upstream: http://hg.openjdk.java.net/jdk7u/jdk7u/jdk/rev/9d29c19f1de1

X-SVN-Rev: 38142
This commit is contained in:
Steven R. Loomis 2015-12-17 01:36:04 +00:00
parent 32af290668
commit 3ff0ac77ad

View File

@ -1,6 +1,6 @@
/* /*
* *
* (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved * (C) Copyright IBM Corp. and others 1998-2015 - All Rights Reserved
* *
*/ */
@ -113,7 +113,7 @@ le_uint32 LookupProcessor::applySingleLookup(le_uint16 lookupTableIndex, GlyphIt
le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success) le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featureTable, FeatureMask featureMask, le_int32 order, LEErrorCode &success)
{ {
le_uint16 lookupCount = featureTable.isValid()? SWAPW(featureTable->lookupCount) : 0; le_uint16 lookupCount = featureTable.isValid()? SWAPW(featureTable->lookupCount) : 0;
le_int32 store = order; le_int32 store = (le_uint32)order;
LEReferenceToArrayOf<le_uint16> lookupListIndexArray(featureTable, success, featureTable->lookupListIndexArray, lookupCount); LEReferenceToArrayOf<le_uint16> lookupListIndexArray(featureTable, success, featureTable->lookupListIndexArray, lookupCount);
@ -122,6 +122,9 @@ le_int32 LookupProcessor::selectLookups(const LEReferenceTo<FeatureTable> &featu
if (lookupListIndex >= lookupSelectCount) { if (lookupListIndex >= lookupSelectCount) {
continue; continue;
} }
if (store >= lookupOrderCount) {
continue;
}
lookupSelectArray[lookupListIndex] |= featureMask; lookupSelectArray[lookupListIndex] |= featureMask;
lookupOrderArray[store++] = lookupListIndex; lookupOrderArray[store++] = lookupListIndex;
@ -220,7 +223,7 @@ LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
if (requiredFeatureIndex != 0xFFFF) { if (requiredFeatureIndex != 0xFFFF) {
requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success); requiredFeatureTable = featureListTable->getFeatureTable(featureListTable, requiredFeatureIndex, &requiredFeatureTag, success);
featureReferences += SWAPW(featureTable->lookupCount); featureReferences += SWAPW(requiredFeatureTable->lookupCount);
} }
lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences); lookupOrderArray = LE_NEW_ARRAY(le_uint16, featureReferences);
@ -228,6 +231,7 @@ LookupProcessor::LookupProcessor(const LETableReference &baseAddress,
success = LE_MEMORY_ALLOCATION_ERROR; success = LE_MEMORY_ALLOCATION_ERROR;
return; return;
} }
lookupOrderCount = featureReferences;
for (le_int32 f = 0; f < featureMapCount; f += 1) { for (le_int32 f = 0; f < featureMapCount; f += 1) {
FeatureMap fm = featureMap[f]; FeatureMap fm = featureMap[f];