@@ -257,4 +257,60 @@ describe("decode", () => {
257
257
258
258
assertEquals ( info . scopes , [ ] ) ;
259
259
} ) ;
260
+
261
+ it ( "throws if ORIGINAL_SCOPE_VARIABLES indices are out-of-bounds (upper)" , ( ) => {
262
+ const encoder = new ItemEncoder ( ) ;
263
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
264
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_VARIABLES ) ;
265
+ encoder . addSignedVLQs ( 0 , 2 ) . finishItem ( ) ; // The '2' is illegal as we only have 1 name.
266
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 1 , 0 ) . finishItem ( ) ;
267
+ const map = createMap ( encoder . encode ( ) , [ "foo" ] ) ;
268
+
269
+ assertThrows (
270
+ ( ) => decode ( map , { mode : DecodeMode . STRICT } ) ,
271
+ Error ,
272
+ "index into the 'names'" ,
273
+ ) ;
274
+ } ) ;
275
+
276
+ it ( "throws if ORIGINAL_SCOPE_VARIABLES indices are out-of-bounds (lower)" , ( ) => {
277
+ const encoder = new ItemEncoder ( ) ;
278
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
279
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_VARIABLES ) ;
280
+ encoder . addSignedVLQs ( 0 , - 1 ) . finishItem ( ) ; // The '-1' is illegal as we only have 1 name.
281
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 1 , 0 ) . finishItem ( ) ;
282
+ const map = createMap ( encoder . encode ( ) , [ "foo" ] ) ;
283
+
284
+ assertThrows (
285
+ ( ) => decode ( map , { mode : DecodeMode . STRICT } ) ,
286
+ Error ,
287
+ "index into the 'names'" ,
288
+ ) ;
289
+ } ) ;
290
+
291
+ it ( "ignores if ORIGINAL_SCOPE_VARIABLES indices are out-of-bounds (upper)" , ( ) => {
292
+ const encoder = new ItemEncoder ( ) ;
293
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
294
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_VARIABLES ) ;
295
+ encoder . addSignedVLQs ( 0 , 2 ) . finishItem ( ) ; // The '2' is illegal as we only have 1 name.
296
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 1 , 0 ) . finishItem ( ) ;
297
+ const map = createMap ( encoder . encode ( ) , [ "foo" ] ) ;
298
+
299
+ const info = decode ( map , { mode : DecodeMode . LAX } ) ;
300
+
301
+ assertEquals ( info . scopes [ 0 ] ?. variables , [ "foo" , "" ] ) ;
302
+ } ) ;
303
+
304
+ it ( "ignores if ORIGINAL_SCOPE_VARIABLES indices are out-of-bounds (lower)" , ( ) => {
305
+ const encoder = new ItemEncoder ( ) ;
306
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_START , 0 , 0 , 0 ) . finishItem ( ) ;
307
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_VARIABLES ) ;
308
+ encoder . addSignedVLQs ( 0 , - 1 ) . finishItem ( ) ; // The '-1' is illegal as we only have 1 name.
309
+ encoder . addUnsignedVLQs ( Tag . ORIGINAL_SCOPE_END , 1 , 0 ) . finishItem ( ) ;
310
+ const map = createMap ( encoder . encode ( ) , [ "foo" ] ) ;
311
+
312
+ const info = decode ( map , { mode : DecodeMode . LAX } ) ;
313
+
314
+ assertEquals ( info . scopes [ 0 ] ?. variables , [ "foo" , "" ] ) ;
315
+ } ) ;
260
316
} ) ;
0 commit comments