@@ -295,4 +295,105 @@ describe('buffer reader', () => {
295295 ) ;
296296 } ) ;
297297 } ) ;
298+
299+ describe ( 'maxSize bounds checking' , ( ) => {
300+ describe ( 'readVector with maxSize' , ( ) => {
301+ it ( 'should read vector when size is within bounds' , ( ) => {
302+ const items = [ 1 , 2 , 3 ] ;
303+ const buffer = serializeToBuffer ( items . length , items ) ;
304+ const reader = new BufferReader ( buffer ) ;
305+
306+ const result = reader . readVector ( { fromBuffer : ( r : BufferReader ) => r . readNumber ( ) } , 10 ) ;
307+
308+ expect ( result ) . toEqual ( items ) ;
309+ } ) ;
310+
311+ it ( 'should throw when vector size exceeds maxSize' , ( ) => {
312+ const items = [ 1 , 2 , 3 , 4 , 5 ] ;
313+ const buffer = serializeToBuffer ( items . length , items ) ;
314+ const reader = new BufferReader ( buffer ) ;
315+
316+ expect ( ( ) => {
317+ reader . readVector ( { fromBuffer : ( r : BufferReader ) => r . readNumber ( ) } , 3 ) ;
318+ } ) . toThrow ( 'Vector size 5 exceeds maximum allowed 3' ) ;
319+ } ) ;
320+
321+ it ( 'should allow any size when maxSize is not provided' , ( ) => {
322+ const items = [ 1 , 2 , 3 , 4 , 5 ] ;
323+ const buffer = serializeToBuffer ( items . length , items ) ;
324+ const reader = new BufferReader ( buffer ) ;
325+
326+ const result = reader . readVector ( { fromBuffer : ( r : BufferReader ) => r . readNumber ( ) } ) ;
327+
328+ expect ( result ) . toEqual ( items ) ;
329+ } ) ;
330+ } ) ;
331+
332+ describe ( 'readBuffer with maxSize' , ( ) => {
333+ it ( 'should read buffer when size is within bounds' , ( ) => {
334+ const data = Buffer . from ( 'hello' ) ;
335+ // readBuffer expects length prefix + data
336+ const buffer = serializeToBuffer ( data . length , data ) ;
337+ const reader = new BufferReader ( buffer ) ;
338+
339+ const result = reader . readBuffer ( 10 ) ;
340+
341+ expect ( result ) . toEqual ( data ) ;
342+ } ) ;
343+
344+ it ( 'should throw when buffer size exceeds maxSize' , ( ) => {
345+ const data = Buffer . from ( 'hello world' ) ;
346+ // readBuffer expects length prefix + data
347+ const buffer = serializeToBuffer ( data . length , data ) ;
348+ const reader = new BufferReader ( buffer ) ;
349+
350+ expect ( ( ) => {
351+ reader . readBuffer ( 5 ) ;
352+ } ) . toThrow ( 'Buffer size 11 exceeds maximum allowed 5' ) ;
353+ } ) ;
354+
355+ it ( 'should allow any size when maxSize is not provided' , ( ) => {
356+ const data = Buffer . from ( 'hello world' ) ;
357+ // readBuffer expects length prefix + data
358+ const buffer = serializeToBuffer ( data . length , data ) ;
359+ const reader = new BufferReader ( buffer ) ;
360+
361+ const result = reader . readBuffer ( ) ;
362+
363+ expect ( result ) . toEqual ( data ) ;
364+ } ) ;
365+ } ) ;
366+
367+ describe ( 'readString with maxSize' , ( ) => {
368+ it ( 'should read string when size is within bounds' , ( ) => {
369+ const str = 'hello' ;
370+ const buffer = serializeToBuffer ( str ) ;
371+ const reader = new BufferReader ( buffer ) ;
372+
373+ const result = reader . readString ( 10 ) ;
374+
375+ expect ( result ) . toEqual ( str ) ;
376+ } ) ;
377+
378+ it ( 'should throw when string size exceeds maxSize' , ( ) => {
379+ const str = 'hello world' ;
380+ const buffer = serializeToBuffer ( str ) ;
381+ const reader = new BufferReader ( buffer ) ;
382+
383+ expect ( ( ) => {
384+ reader . readString ( 5 ) ;
385+ } ) . toThrow ( 'Buffer size 11 exceeds maximum allowed 5' ) ;
386+ } ) ;
387+
388+ it ( 'should allow any size when maxSize is not provided' , ( ) => {
389+ const str = 'hello world' ;
390+ const buffer = serializeToBuffer ( str ) ;
391+ const reader = new BufferReader ( buffer ) ;
392+
393+ const result = reader . readString ( ) ;
394+
395+ expect ( result ) . toEqual ( str ) ;
396+ } ) ;
397+ } ) ;
398+ } ) ;
298399} ) ;
0 commit comments