mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-13 08:53:20 +00:00
ICU-11865 Layout update
Upstream: http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/rev/efc8652da937 X-SVN-Rev: 38143
This commit is contained in:
parent
3ff0ac77ad
commit
6f25906b7f
2 changed files with 16 additions and 4 deletions
|
@ -16,7 +16,7 @@ U_NAMESPACE_BEGIN
|
|||
LEReferenceTo<FeatureTable> FeatureListTable::getFeatureTable(const LETableReference &base, le_uint16 featureIndex, LETag *featureTag, LEErrorCode &success) const
|
||||
{
|
||||
LEReferenceToArrayOf<FeatureRecord>
|
||||
featureRecordArrayRef(base, success, featureRecordArray, featureIndex);
|
||||
featureRecordArrayRef(base, success, featureRecordArray, featureIndex+1);
|
||||
|
||||
if (featureIndex >= SWAPW(featureCount) || LE_FAILURE(success)) {
|
||||
return LEReferenceTo<FeatureTable>();
|
||||
|
|
|
@ -179,6 +179,18 @@ public:
|
|||
return fLength;
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw an error if size*count overflows
|
||||
*/
|
||||
size_t verifyLength(size_t offset, size_t size, le_uint32 count, LEErrorCode &success) {
|
||||
if(count!=0 && size>LE_UINT32_MAX/count) {
|
||||
LE_DEBUG_TR3("verifyLength failed size=%u, count=%u", size, count);
|
||||
success = LE_INDEX_OUT_OF_BOUNDS_ERROR;
|
||||
return 0;
|
||||
}
|
||||
return verifyLength(offset, size*count, success);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change parent link to another
|
||||
*/
|
||||
|
@ -269,7 +281,7 @@ public:
|
|||
if(count == LE_UNBOUNDED_ARRAY) { // not a known length
|
||||
count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
|
||||
}
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize()*count, success);
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
|
||||
}
|
||||
if(LE_FAILURE(success)) {
|
||||
fCount=0;
|
||||
|
@ -284,7 +296,7 @@ LE_TRACE_TR("INFO: new RTAO")
|
|||
if(count == LE_UNBOUNDED_ARRAY) { // not a known length
|
||||
count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
|
||||
}
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize()*count, success);
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
|
||||
}
|
||||
if(LE_FAILURE(success)) clear();
|
||||
}
|
||||
|
@ -295,7 +307,7 @@ LE_TRACE_TR("INFO: new RTAO")
|
|||
if(count == LE_UNBOUNDED_ARRAY) { // not a known length
|
||||
count = getLength()/LETableVarSizer<T>::getSize(); // fit to max size
|
||||
}
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize()*count, success);
|
||||
LETableReference::verifyLength(0, LETableVarSizer<T>::getSize(), fCount, success);
|
||||
}
|
||||
if(LE_FAILURE(success)) clear();
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue