From de7c94ea4b2a4c05238cbd5d399a95df7bb65e15 Mon Sep 17 00:00:00 2001 From: aivanov Date: Tue, 22 Dec 2015 09:58:49 +0300 Subject: [PATCH] 8145551: Test failed with Crash for Improved font lookups Reviewed-by: prr, vadim --- src/share/native/sun/font/layout/Features.cpp | 7 ++++--- src/share/native/sun/font/layout/Lookups.cpp | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/share/native/sun/font/layout/Features.cpp b/src/share/native/sun/font/layout/Features.cpp index 062188850..730ad52a0 100644 --- a/src/share/native/sun/font/layout/Features.cpp +++ b/src/share/native/sun/font/layout/Features.cpp @@ -43,9 +43,10 @@ LEReferenceTo FeatureListTable::getFeatureTable(const LETableRefer LEReferenceToArrayOf featureRecordArrayRef(base, success, featureRecordArray, SWAPW(featureCount)); - if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) { - return LEReferenceTo(); - } + if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) { + success = LE_INDEX_OUT_OF_BOUNDS_ERROR; + return LEReferenceTo(); + } Offset featureTableOffset = featureRecordArray[featureIndex].featureTableOffset; diff --git a/src/share/native/sun/font/layout/Lookups.cpp b/src/share/native/sun/font/layout/Lookups.cpp index f914f2d7e..ed2f66733 100644 --- a/src/share/native/sun/font/layout/Lookups.cpp +++ b/src/share/native/sun/font/layout/Lookups.cpp @@ -42,6 +42,7 @@ const LEReferenceTo LookupListTable::getLookupTable(const LEReferen LEReferenceToArrayOf lookupTableOffsetArrayRef(base, success, (const Offset*)&lookupTableOffsetArray, SWAPW(lookupCount)); if(LE_FAILURE(success) || lookupTableIndex>lookupTableOffsetArrayRef.getCount()) { + success = LE_INDEX_OUT_OF_BOUNDS_ERROR; return LEReferenceTo(); } else { return LEReferenceTo(base, success, SWAPW(lookupTableOffsetArrayRef.getObject(lookupTableIndex, success))); @@ -53,6 +54,7 @@ const LEReferenceTo LookupTable::getLookupSubtable(const LERefer LEReferenceToArrayOf subTableOffsetArrayRef(base, success, (const Offset*)&subTableOffsetArray, SWAPW(subTableCount)); if(LE_FAILURE(success) || subtableIndex>subTableOffsetArrayRef.getCount()) { + success = LE_INDEX_OUT_OF_BOUNDS_ERROR; return LEReferenceTo(); } else { return LEReferenceTo(base, success, SWAPW(subTableOffsetArrayRef.getObject(subtableIndex, success))); -- GitLab