@@ -1144,6 +1144,40 @@ test('parse()', function (t) {
11441144 sst . end ( ) ;
11451145 } ) ;
11461146
1147+ st . test ( 'throws error when indexed notation exceeds arrayLimit with throwOnLimitExceeded' , function ( sst ) {
1148+ sst [ 'throws' ] (
1149+ function ( ) {
1150+ qs . parse ( 'a[1001]=b' , { arrayLimit : 1000 , throwOnLimitExceeded : true } ) ;
1151+ } ,
1152+ new RangeError ( 'Array limit exceeded. Only 1000 elements allowed in an array.' ) ,
1153+ 'throws error for a single index exceeding arrayLimit'
1154+ ) ;
1155+
1156+ sst [ 'throws' ] (
1157+ function ( ) {
1158+ qs . parse ( 'a[0]=1&a[1]=2&a[2]=3&a[10]=4' , { arrayLimit : 6 , throwOnLimitExceeded : true , allowSparse : true } ) ;
1159+ } ,
1160+ new RangeError ( 'Array limit exceeded. Only 6 elements allowed in an array.' ) ,
1161+ 'throws error when a sparse index exceeds arrayLimit'
1162+ ) ;
1163+
1164+ sst . end ( ) ;
1165+ } ) ;
1166+
1167+ st . test ( 'does not throw for indexed notation within arrayLimit with throwOnLimitExceeded' , function ( sst ) {
1168+ var result = qs . parse ( 'a[4]=b' , { arrayLimit : 5 , throwOnLimitExceeded : true , allowSparse : true } ) ;
1169+ sst . ok ( Array . isArray ( result . a ) , 'result is an array' ) ;
1170+ sst . equal ( result . a . length , 5 , 'array has correct length' ) ;
1171+ sst . equal ( result . a [ 4 ] , 'b' , 'value at index 4 is correct' ) ;
1172+ sst . end ( ) ;
1173+ } ) ;
1174+
1175+ st . test ( 'silently converts to object for indexed notation exceeding arrayLimit without throwOnLimitExceeded' , function ( sst ) {
1176+ var result = qs . parse ( 'a[1001]=b' , { arrayLimit : 1000 } ) ;
1177+ sst . deepEqual ( result , { a : { 1001 : 'b' } } , 'converts to object without throwing' ) ;
1178+ sst . end ( ) ;
1179+ } ) ;
1180+
11471181 st . end ( ) ;
11481182 } ) ;
11491183
0 commit comments