@@ -45,25 +45,28 @@ function parseTarVerboseSize(line: string): number {
4545
4646 let dateIndex = tokens . findIndex ( ( token ) => TAR_VERBOSE_MONTHS . has ( token ) ) ;
4747 if ( dateIndex > 0 ) {
48- const size = Number . parseInt ( tokens [ dateIndex - 1 ] ?? "" , 10 ) ;
49- if ( ! Number . isFinite ( size ) || size < 0 ) {
50- throw new Error ( `unable to parse tar entry size: ${ line } ` ) ;
51- }
52- return size ;
48+ return parseTarSizeToken ( tokens [ dateIndex - 1 ] ?? "" , line ) ;
5349 }
5450
5551 dateIndex = tokens . findIndex ( ( token ) => ISO_DATE_PATTERN . test ( token ) ) ;
5652 if ( dateIndex > 0 ) {
57- const size = Number . parseInt ( tokens [ dateIndex - 1 ] ?? "" , 10 ) ;
58- if ( ! Number . isFinite ( size ) || size < 0 ) {
59- throw new Error ( `unable to parse tar entry size: ${ line } ` ) ;
60- }
61- return size ;
53+ return parseTarSizeToken ( tokens [ dateIndex - 1 ] ?? "" , line ) ;
6254 }
6355
6456 throw new Error ( `unable to parse tar verbose metadata: ${ line } ` ) ;
6557}
6658
59+ function parseTarSizeToken ( raw : string , line : string ) : number {
60+ if ( ! / ^ \d + $ / . test ( raw ) ) {
61+ throw new Error ( `unable to parse tar entry size: ${ line } ` ) ;
62+ }
63+ const size = Number ( raw ) ;
64+ if ( ! Number . isSafeInteger ( size ) ) {
65+ throw new Error ( `unable to parse tar entry size: ${ line } ` ) ;
66+ }
67+ return size ;
68+ }
69+
6770export function parseTarVerboseMetadata ( stdout : string ) : Array < { type : string ; size : number } > {
6871 const lines = normalizeStringEntries ( stdout . split ( "\n" ) ) ;
6972 return lines . map ( ( line ) => {
0 commit comments