@@ -84,6 +84,7 @@ const NODES: ReadonlyArray<string> = [
8484 'chunk_size_almost_done' ,
8585 'chunk_size_almost_done_lf' ,
8686 'chunk_parameters' ,
87+ 'chunk_parameters_ows' ,
8788 'chunk_data' ,
8889 'chunk_data_almost_done' ,
8990 'chunk_data_almost_done_skip' ,
@@ -101,6 +102,7 @@ const NODES: ReadonlyArray<string> = [
101102
102103interface ISpanMap {
103104 readonly body : source . Span ;
105+ readonly chunkParameters : source . Span ;
104106 readonly headerField : source . Span ;
105107 readonly headerValue : source . Span ;
106108 readonly status : source . Span ;
@@ -157,6 +159,7 @@ export class HTTP {
157159
158160 this . span = {
159161 body : p . span ( p . code . span ( 'llhttp__on_body' ) ) ,
162+ chunkParameters : p . span ( p . code . span ( 'llhttp__on_chunk_parameters' ) ) ,
160163 headerField : p . span ( p . code . span ( 'llhttp__on_header_field' ) ) ,
161164 headerValue : p . span ( p . code . span ( 'llhttp__on_header_value' ) ) ,
162165 status : p . span ( p . code . span ( 'llhttp__on_status' ) ) ,
@@ -798,12 +801,16 @@ export class HTTP {
798801
799802 n ( 'chunk_size_otherwise' )
800803 . match ( '\r' , n ( 'chunk_size_almost_done' ) )
801- . match ( [ ';' , ' ' ] , n ( 'chunk_parameters ' ) )
804+ . match ( [ ';' ] , n ( 'chunk_parameters_ows ' ) )
802805 . otherwise ( p . error ( ERROR . INVALID_CHUNK_SIZE ,
803806 'Invalid character in chunk size' ) ) ;
804807
808+ n ( 'chunk_parameters_ows' )
809+ . match ( ' ' , n ( 'chunk_parameters_ows' ) )
810+ . otherwise ( span . chunkParameters . start ( n ( 'chunk_parameters' ) ) ) ;
811+
805812 n ( 'chunk_parameters' )
806- . match ( '\r' , n ( 'chunk_size_almost_done' ) )
813+ . peek ( '\r' , span . chunkParameters . end ( ) . skipTo ( n ( 'chunk_size_almost_done' ) ) )
807814 . match ( HEADER_CHARS , n ( 'chunk_parameters' ) )
808815 . otherwise ( p . error ( ERROR . STRICT ,
809816 'Invalid character in chunk parameters' ) ) ;
0 commit comments