@@ -160,6 +160,35 @@ test('VLI encoding overflow', () => {
160160 expect ( ( ) => { vli . encodeVli ( view1 , 128 * 128 * 128 * 128 ) } ) . toThrow ( "Invalid VLI value" ) ;
161161} ) ;
162162
163+ test ( 'VLI decoding invalid offset' , ( ) => {
164+ let buffer1 = new Uint8Array ( [ 0 , 128 , 0 ] ) ;
165+ expect ( ( ) => { vli . decodeVli ( new DataView ( buffer1 . buffer , 1 , 1 ) , - 1 ) } ) . toThrow ( "Invalid DataView offset" ) ;
166+ } ) ;
167+
168+ test ( 'VLI decoding - insufficient data' , ( ) => {
169+ let buffer0 = new Uint8Array ( [ 0 ] ) ;
170+ expect ( vli . decodeVli ( new DataView ( buffer0 . buffer , 0 , 0 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
171+
172+ let buffer1 = new Uint8Array ( [ 0 , 128 , 0 ] ) ;
173+ expect ( vli . decodeVli ( new DataView ( buffer1 . buffer , 1 , 0 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
174+ expect ( vli . decodeVli ( new DataView ( buffer1 . buffer , 1 , 1 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
175+
176+ let buffer2 = new Uint8Array ( [ 0 , 0 , 128 , 128 , 0 ] ) ;
177+ expect ( vli . decodeVli ( new DataView ( buffer2 . buffer , 2 , 0 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
178+ expect ( vli . decodeVli ( new DataView ( buffer2 . buffer , 2 , 1 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
179+ expect ( vli . decodeVli ( new DataView ( buffer2 . buffer , 2 , 2 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
180+
181+ let buffer3 = new Uint8Array ( [ 0 , 0 , 0 , 128 , 128 , 128 , 0 ] ) ;
182+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 3 , 0 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
183+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 3 , 1 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
184+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 3 , 2 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
185+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 3 , 3 ) , 0 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
186+
187+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 1 , 2 ) , 2 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
188+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 1 , 3 ) , 2 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
189+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 1 , 4 ) , 2 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
190+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer , 1 , 5 ) , 2 ) . type ) . toBe ( vli . VliDecodeResultType . MoreData ) ;
191+ } ) ;
163192
164193test ( 'VLI decoding - 1 byte' , ( ) => {
165194 let buffer_0 = new Uint8Array ( [ 0 ] ) ;
@@ -173,6 +202,11 @@ test('VLI decoding - 1 byte', () => {
173202
174203 let buffer_127 = new Uint8Array ( [ 127 ] ) ;
175204 expect ( vli . decodeVli ( new DataView ( buffer_127 . buffer ) , 0 ) . value ) . toBe ( 127 ) ;
205+
206+ let buffer_127_offset = new Uint8Array ( [ 0 , 127 , 0 ] ) ;
207+ let result = vli . decodeVli ( new DataView ( buffer_127_offset . buffer ) , 1 ) ;
208+ expect ( result . value ) . toBe ( 127 ) ;
209+ expect ( result . nextOffset ) . toBe ( 2 ) ;
176210} ) ;
177211
178212test ( 'VLI decoding - 2 byte' , ( ) => {
@@ -193,6 +227,11 @@ test('VLI decoding - 2 byte', () => {
193227
194228 let buffer_16382 = new Uint8Array ( [ 254 , 127 ] ) ;
195229 expect ( vli . decodeVli ( new DataView ( buffer_16382 . buffer ) , 0 ) . value ) . toBe ( 16382 ) ;
230+
231+ let buffer_16382_offset = new Uint8Array ( [ 0 , 0 , 254 , 127 , 0 ] ) ;
232+ let result = vli . decodeVli ( new DataView ( buffer_16382_offset . buffer ) , 2 ) ;
233+ expect ( result . value ) . toBe ( 16382 ) ;
234+ expect ( result . nextOffset ) . toBe ( 4 ) ;
196235} ) ;
197236
198237test ( 'VLI decoding - 3 byte' , ( ) => {
@@ -210,6 +249,11 @@ test('VLI decoding - 3 byte', () => {
210249
211250 let buffer5 = new Uint8Array ( [ 255 , 255 , 127 ] ) ;
212251 expect ( vli . decodeVli ( new DataView ( buffer5 . buffer ) , 0 ) . value ) . toBe ( 128 * 128 * 128 - 1 ) ;
252+
253+ let buffer5_offset = new Uint8Array ( [ 0 , 0 , 0 , 255 , 255 , 127 , 0 ] ) ;
254+ let result = vli . decodeVli ( new DataView ( buffer5_offset . buffer ) , 3 ) ;
255+ expect ( result . value ) . toBe ( 128 * 128 * 128 - 1 ) ;
256+ expect ( result . nextOffset ) . toBe ( 6 ) ;
213257} ) ;
214258
215259test ( 'VLI decoding - 4 byte' , ( ) => {
@@ -219,8 +263,13 @@ test('VLI decoding - 4 byte', () => {
219263 let buffer2 = new Uint8Array ( [ 129 , 128 , 128 , 1 ] ) ;
220264 expect ( vli . decodeVli ( new DataView ( buffer2 . buffer ) , 0 ) . value ) . toBe ( 128 * 128 * 128 + 1 ) ;
221265
222- let buffer5 = new Uint8Array ( [ 255 , 255 , 255 , 127 ] ) ;
223- expect ( vli . decodeVli ( new DataView ( buffer5 . buffer ) , 0 ) . value ) . toBe ( 128 * 128 * 128 * 128 - 1 ) ;
266+ let buffer3 = new Uint8Array ( [ 255 , 255 , 255 , 127 ] ) ;
267+ expect ( vli . decodeVli ( new DataView ( buffer3 . buffer ) , 0 ) . value ) . toBe ( 128 * 128 * 128 * 128 - 1 ) ;
268+
269+ let buffer3_offset = new Uint8Array ( [ 0 , 0 , 0 , 0 , 255 , 255 , 255 , 127 , 0 ] ) ;
270+ let result = vli . decodeVli ( new DataView ( buffer3_offset . buffer ) , 4 ) ;
271+ expect ( result . value ) . toBe ( 128 * 128 * 128 * 128 - 1 ) ;
272+ expect ( result . nextOffset ) . toBe ( 8 ) ;
224273} ) ;
225274
226275function doRoundTripEncodeDecodeVliTest ( value : number ) {
0 commit comments