@@ -59,6 +59,14 @@ class MultipartParser extends Transform {
5959 this . flags = 0 ;
6060 }
6161
62+ _endUnexpected ( ) {
63+ return new FormidableError (
64+ `MultipartParser.end(): stream ended unexpectedly: ${ this . explain ( ) } ` ,
65+ errors . malformedMultipart ,
66+ 400 ,
67+ ) ;
68+ }
69+
6270 _flush ( done ) {
6371 if (
6472 ( this . state === STATE . HEADER_FIELD_START && this . index === 0 ) ||
@@ -68,13 +76,9 @@ class MultipartParser extends Transform {
6876 this . _handleCallback ( 'end' ) ;
6977 done ( ) ;
7078 } else if ( this . state !== STATE . END ) {
71- done (
72- new FormidableError (
73- `MultipartParser.end(): stream ended unexpectedly: ${ this . explain ( ) } ` ,
74- errors . malformedMultipart ,
75- 400 ,
76- ) ,
77- ) ;
79+ done ( this . _endUnexpected ( ) ) ;
80+ } else {
81+ done ( ) ;
7882 }
7983 }
8084
@@ -136,7 +140,8 @@ class MultipartParser extends Transform {
136140 c = buffer [ i ] ;
137141 switch ( state ) {
138142 case STATE . PARSER_UNINITIALIZED :
139- return i ;
143+ done ( this . _endUnexpected ( ) ) ;
144+ return ;
140145 case STATE . START :
141146 index = 0 ;
142147 state = STATE . START_BOUNDARY ;
@@ -145,7 +150,8 @@ class MultipartParser extends Transform {
145150 if ( c === HYPHEN ) {
146151 flags |= FBOUNDARY . LAST_BOUNDARY ;
147152 } else if ( c !== CR ) {
148- return i ;
153+ done ( this . _endUnexpected ( ) ) ;
154+ return ;
149155 }
150156 index ++ ;
151157 break ;
@@ -159,7 +165,8 @@ class MultipartParser extends Transform {
159165 this . _handleCallback ( 'partBegin' ) ;
160166 state = STATE . HEADER_FIELD_START ;
161167 } else {
162- return i ;
168+ done ( this . _endUnexpected ( ) ) ;
169+ return ;
163170 }
164171 break ;
165172 }
@@ -190,7 +197,8 @@ class MultipartParser extends Transform {
190197 if ( c === COLON ) {
191198 if ( index === 1 ) {
192199 // empty header field
193- return i ;
200+ done ( this . _endUnexpected ( ) ) ;
201+ return ;
194202 }
195203 dataCallback ( 'headerField' , true ) ;
196204 state = STATE . HEADER_VALUE_START ;
@@ -199,7 +207,8 @@ class MultipartParser extends Transform {
199207
200208 cl = lower ( c ) ;
201209 if ( cl < A || cl > Z ) {
202- return i ;
210+ done ( this . _endUnexpected ( ) ) ;
211+ return ;
203212 }
204213 break ;
205214 case STATE . HEADER_VALUE_START :
@@ -218,13 +227,15 @@ class MultipartParser extends Transform {
218227 break ;
219228 case STATE . HEADER_VALUE_ALMOST_DONE :
220229 if ( c !== LF ) {
221- return i ;
230+ done ( this . _endUnexpected ( ) ) ;
231+ return ;
222232 }
223233 state = STATE . HEADER_FIELD_START ;
224234 break ;
225235 case STATE . HEADERS_ALMOST_DONE :
226236 if ( c !== LF ) {
227- return i ;
237+ done ( this . _endUnexpected ( ) ) ;
238+ return ;
228239 }
229240
230241 this . _handleCallback ( 'headersEnd' ) ;
@@ -311,7 +322,8 @@ class MultipartParser extends Transform {
311322 case STATE . END :
312323 break ;
313324 default :
314- return i ;
325+ done ( this . _endUnexpected ( ) ) ;
326+ return ;
315327 }
316328 }
317329
0 commit comments