@@ -1192,42 +1192,48 @@ void JSSynchronousGarbageCollectForDebugging(JSContextRef);
11921192static void checkJSStringOOBUTF8 (void )
11931193{
11941194 const size_t sourceCStringSize = 200 ;
1195- const size_t outCStringSize = 10 ;
1195+ const size_t cStringSize = 10 ;
1196+ const size_t outCStringSize = cStringSize + sourceCStringSize ;
11961197
1197- char * sourceCString = (char * )malloc (sourceCStringSize );
1198- memset (sourceCString , 0 , sourceCStringSize );
1198+ IGNORE_WARNINGS_BEGIN ("vla" )
1199+ char sourceCString [sourceCStringSize ];
1200+ IGNORE_WARNINGS_END
1201+ memset (sourceCString , 0 , sizeof (sourceCString ));
11991202 for (size_t i = 0 ; i < sourceCStringSize - 1 ; ++ i )
12001203 sourceCString [i ] = '0' + (i %10 );
12011204
1202- char * outCString = (char * )malloc (outCStringSize + sourceCStringSize );
1203- memset (outCString , 0x13 , outCStringSize + sourceCStringSize );
1205+ IGNORE_WARNINGS_BEGIN ("vla" )
1206+ char outCString [outCStringSize ];
1207+ IGNORE_WARNINGS_END
1208+ memset (outCString , 0x13 , sizeof (outCString ));
12041209
12051210 JSStringRef str = JSStringCreateWithUTF8CString (sourceCString );
1206- size_t bytesWritten = JSStringGetUTF8CString (str , outCString , outCStringSize );
1211+ size_t bytesWritten = JSStringGetUTF8CString (str , outCString , cStringSize );
12071212
12081213 assertTrue (bytesWritten == 10 , "we report 10 bytes written precisely" );
12091214
12101215 for (size_t i = 0 ; i < sizeof (outCString ); ++ i ) {
1211- if (i == outCStringSize - 1 )
1216+ if (i == cStringSize - 1 )
12121217 assertTrue (outCString [i ] == '\0' , "string terminated" );
1213- else if (i < outCStringSize - 1 )
1218+ else if (i < cStringSize - 1 )
12141219 assertTrue (outCString [i ] == sourceCString [i ], "string copied" );
12151220 else
12161221 assertTrue (outCString [i ] == 0x13 , "did not write past the end" );
12171222 }
12181223
12191224 JSStringRelease (str );
1220- free (outCString );
1221- free (sourceCString );
12221225}
12231226
12241227static void checkJSStringOOBUTF16 (void )
12251228{
12261229 const size_t sourceCStringSize = 22 ;
1227- const size_t outCStringSize = 20 ;
1230+ const size_t cStringSize = 20 ;
1231+ const size_t outCStringSize = cStringSize + sourceCStringSize ;
12281232
1229- char * sourceCString = (char * )malloc (sourceCStringSize );
1230- memset (sourceCString , 0 , sourceCStringSize );
1233+ IGNORE_WARNINGS_BEGIN ("vla" )
1234+ char sourceCString [sourceCStringSize ];
1235+ IGNORE_WARNINGS_END
1236+ memset (sourceCString , 0 , sizeof (sourceCString ));
12311237 for (size_t i = 0 ; i < sourceCStringSize - 1 ; ++ i )
12321238 sourceCString [i ] = '0' + (i %10 );
12331239
@@ -1236,35 +1242,38 @@ static void checkJSStringOOBUTF16(void)
12361242 sourceCString [5 ] = '\x98' ;
12371243 sourceCString [6 ] = '\x81' ;
12381244
1239- char * outCString = (char * )malloc (outCStringSize + sourceCStringSize );
1240- memset (outCString , 0x13 , outCStringSize + sourceCStringSize );
1245+ IGNORE_WARNINGS_BEGIN ("vla" )
1246+ char outCString [outCStringSize ];
1247+ IGNORE_WARNINGS_END
1248+ memset (outCString , 0x13 , sizeof (outCString ));
12411249
12421250 JSStringRef str = JSStringCreateWithUTF8CString (sourceCString );
1243- size_t bytesWritten = JSStringGetUTF8CString (str , outCString , outCStringSize );
1251+ size_t bytesWritten = JSStringGetUTF8CString (str , outCString , cStringSize );
12441252
12451253 assertTrue (bytesWritten == 20 , "we report 20 bytes written precisely" );
12461254
12471255 for (size_t i = 0 ; i < sizeof (outCString ); ++ i ) {
1248- if (i == outCStringSize - 1 )
1256+ if (i == cStringSize - 1 )
12491257 assertTrue (outCString [i ] == '\0' , "string terminated" );
1250- else if (i < outCStringSize - 1 )
1258+ else if (i < cStringSize - 1 )
12511259 assertTrue (outCString [i ] == sourceCString [i ], "string copied" );
12521260 else
12531261 assertTrue (outCString [i ] == 0x13 , "did not write past the end" );
12541262 }
12551263
12561264 JSStringRelease (str );
1257- free (outCString );
1258- free (sourceCString );
12591265}
12601266
12611267static void checkJSStringOOBUTF16AtEnd (void )
12621268{
12631269 const size_t sourceCStringSize = 22 ;
1264- const size_t outCStringSize = 20 ;
1270+ const size_t cStringSize = 20 ;
1271+ const size_t outCStringSize = cStringSize + sourceCStringSize ;
12651272
1266- char * sourceCString = (char * )malloc (sourceCStringSize );
1267- memset (sourceCString , 0 , sourceCStringSize );
1273+ IGNORE_WARNINGS_BEGIN ("vla" )
1274+ char sourceCString [sourceCStringSize ];
1275+ IGNORE_WARNINGS_END
1276+ memset (sourceCString , 0 , sizeof (sourceCString ));
12681277 for (size_t i = 0 ; i < sourceCStringSize - 1 ; ++ i )
12691278 sourceCString [i ] = '0' + (i %10 );
12701279
@@ -1273,11 +1282,13 @@ static void checkJSStringOOBUTF16AtEnd(void)
12731282 sourceCString [19 ] = '\x98' ;
12741283 sourceCString [20 ] = '\x81' ;
12751284
1276- char * outCString = (char * )malloc (outCStringSize + sourceCStringSize );
1277- memset (outCString , 0x13 , outCStringSize + sourceCStringSize );
1285+ IGNORE_WARNINGS_BEGIN ("vla" )
1286+ char outCString [outCStringSize ];
1287+ IGNORE_WARNINGS_END
1288+ memset (outCString , 0x13 , sizeof (outCString ));
12781289
12791290 JSStringRef str = JSStringCreateWithUTF8CString (sourceCString );
1280- size_t bytesWritten = JSStringGetUTF8CString (str , outCString , outCStringSize );
1291+ size_t bytesWritten = JSStringGetUTF8CString (str , outCString , cStringSize );
12811292
12821293 assertTrue (bytesWritten == 18 , "we report 18 bytes written precisely" );
12831294
@@ -1291,8 +1302,6 @@ static void checkJSStringOOBUTF16AtEnd(void)
12911302 }
12921303
12931304 JSStringRelease (str );
1294- free (outCString );
1295- free (sourceCString );
12961305}
12971306
12981307static void checkJSStringOOB (void )
0 commit comments