| Index: third_party/harfbuzz/src/harfbuzz-open.c
|
| diff --git a/third_party/harfbuzz/src/harfbuzz-open.c b/third_party/harfbuzz/src/harfbuzz-open.c
|
| index 0fe1e4ddb301a112195b946489f68835238c89bf..f12f5b7f08eb2138fc0d11e815469ce237c6cde6 100644
|
| --- a/third_party/harfbuzz/src/harfbuzz-open.c
|
| +++ b/third_party/harfbuzz/src/harfbuzz-open.c
|
| @@ -1282,9 +1282,10 @@ _HB_OPEN_Get_Class( HB_ClassDefinition* cd,
|
|
|
|
|
| HB_INTERNAL HB_Error
|
| -_HB_OPEN_Load_Device( HB_Device* d,
|
| +_HB_OPEN_Load_Device( HB_Device** device,
|
| HB_Stream stream )
|
| {
|
| + HB_Device* d;
|
| HB_Error error;
|
|
|
| HB_UShort n, count;
|
| @@ -1295,6 +1296,14 @@ _HB_OPEN_Load_Device( HB_Device* d,
|
| if ( ACCESS_Frame( 6L ) )
|
| return error;
|
|
|
| + if ( ALLOC( *device, sizeof(HB_Device)) )
|
| + {
|
| + *device = 0;
|
| + return error;
|
| + }
|
| +
|
| + d = *device;
|
| +
|
| d->StartSize = GET_UShort();
|
| d->EndSize = GET_UShort();
|
| d->DeltaFormat = GET_UShort();
|
| @@ -1318,11 +1327,17 @@ _HB_OPEN_Load_Device( HB_Device* d,
|
| ( 4 - d->DeltaFormat ) ) + 1;
|
|
|
| if ( ALLOC_ARRAY( d->DeltaValue, count, HB_UShort ) )
|
| + {
|
| + FREE( *device );
|
| + *device = 0;
|
| return error;
|
| + }
|
|
|
| if ( ACCESS_Frame( count * 2L ) )
|
| {
|
| FREE( d->DeltaValue );
|
| + FREE( *device );
|
| + *device = 0;
|
| return error;
|
| }
|
|
|
| @@ -1340,7 +1355,11 @@ _HB_OPEN_Load_Device( HB_Device* d,
|
| HB_INTERNAL void
|
| _HB_OPEN_Free_Device( HB_Device* d )
|
| {
|
| - FREE( d->DeltaValue );
|
| + if ( d )
|
| + {
|
| + FREE( d->DeltaValue );
|
| + FREE( d );
|
| + }
|
| }
|
|
|
|
|
| @@ -1384,13 +1403,11 @@ _HB_OPEN_Get_Device( HB_Device* d,
|
| HB_UShort size,
|
| HB_Short* value )
|
| {
|
| - HB_UShort byte, bits, mask, f, s;
|
| -
|
| -
|
| - f = d->DeltaFormat;
|
| + HB_UShort byte, bits, mask, s;
|
|
|
| - if ( d->DeltaValue && size >= d->StartSize && size <= d->EndSize )
|
| + if ( d && d->DeltaValue && size >= d->StartSize && size <= d->EndSize )
|
| {
|
| + HB_UShort f = d->DeltaFormat;
|
| s = size - d->StartSize;
|
| byte = d->DeltaValue[s >> ( 4 - f )];
|
| bits = byte >> ( 16 - ( ( s % ( 1 << ( 4 - f ) ) + 1 ) << f ) );
|
|
|