[kern2] Fix sanitize issue on 32bit systems

Fixes https://github.com/harfbuzz/harfbuzz/issues/3483
This commit is contained in:
Behdad Esfahbod 2022-06-29 16:32:30 -06:00
parent 32e542d6f0
commit c69ec6f5bb
1 changed files with 7 additions and 0 deletions

View File

@ -681,6 +681,13 @@ struct ObsoleteTypes
const void *base, const void *base,
const T *array) const T *array)
{ {
/* https://github.com/harfbuzz/harfbuzz/issues/3483 */
/* If offset is less than base, return an offset that would
* result in an address half a 32bit address-space away,
* to make sure sanitize fails even on 32bit builds. */
if (offset < unsigned ((const char *) array - (const char *) base))
return INT_MAX / T::static_size;
/* https://github.com/harfbuzz/harfbuzz/issues/2816 */ /* https://github.com/harfbuzz/harfbuzz/issues/2816 */
return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size; return (offset - unsigned ((const char *) array - (const char *) base)) / T::static_size;
} }