@@ -59,6 +59,14 @@ class MultipartParser extends Transform {
59
59
this . flags = 0 ;
60
60
}
61
61
62
+ _endUnexpected ( ) {
63
+ return new FormidableError (
64
+ `MultipartParser.end(): stream ended unexpectedly: ${ this . explain ( ) } ` ,
65
+ errors . malformedMultipart ,
66
+ 400 ,
67
+ ) ;
68
+ }
69
+
62
70
_flush ( done ) {
63
71
if (
64
72
( this . state === STATE . HEADER_FIELD_START && this . index === 0 ) ||
@@ -68,13 +76,9 @@ class MultipartParser extends Transform {
68
76
this . _handleCallback ( 'end' ) ;
69
77
done ( ) ;
70
78
} 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 ( ) ;
78
82
}
79
83
}
80
84
@@ -136,7 +140,8 @@ class MultipartParser extends Transform {
136
140
c = buffer [ i ] ;
137
141
switch ( state ) {
138
142
case STATE . PARSER_UNINITIALIZED :
139
- return i ;
143
+ done ( this . _endUnexpected ( ) ) ;
144
+ return ;
140
145
case STATE . START :
141
146
index = 0 ;
142
147
state = STATE . START_BOUNDARY ;
@@ -145,7 +150,8 @@ class MultipartParser extends Transform {
145
150
if ( c === HYPHEN ) {
146
151
flags |= FBOUNDARY . LAST_BOUNDARY ;
147
152
} else if ( c !== CR ) {
148
- return i ;
153
+ done ( this . _endUnexpected ( ) ) ;
154
+ return ;
149
155
}
150
156
index ++ ;
151
157
break ;
@@ -159,7 +165,8 @@ class MultipartParser extends Transform {
159
165
this . _handleCallback ( 'partBegin' ) ;
160
166
state = STATE . HEADER_FIELD_START ;
161
167
} else {
162
- return i ;
168
+ done ( this . _endUnexpected ( ) ) ;
169
+ return ;
163
170
}
164
171
break ;
165
172
}
@@ -190,7 +197,8 @@ class MultipartParser extends Transform {
190
197
if ( c === COLON ) {
191
198
if ( index === 1 ) {
192
199
// empty header field
193
- return i ;
200
+ done ( this . _endUnexpected ( ) ) ;
201
+ return ;
194
202
}
195
203
dataCallback ( 'headerField' , true ) ;
196
204
state = STATE . HEADER_VALUE_START ;
@@ -199,7 +207,8 @@ class MultipartParser extends Transform {
199
207
200
208
cl = lower ( c ) ;
201
209
if ( cl < A || cl > Z ) {
202
- return i ;
210
+ done ( this . _endUnexpected ( ) ) ;
211
+ return ;
203
212
}
204
213
break ;
205
214
case STATE . HEADER_VALUE_START :
@@ -218,13 +227,15 @@ class MultipartParser extends Transform {
218
227
break ;
219
228
case STATE . HEADER_VALUE_ALMOST_DONE :
220
229
if ( c !== LF ) {
221
- return i ;
230
+ done ( this . _endUnexpected ( ) ) ;
231
+ return ;
222
232
}
223
233
state = STATE . HEADER_FIELD_START ;
224
234
break ;
225
235
case STATE . HEADERS_ALMOST_DONE :
226
236
if ( c !== LF ) {
227
- return i ;
237
+ done ( this . _endUnexpected ( ) ) ;
238
+ return ;
228
239
}
229
240
230
241
this . _handleCallback ( 'headersEnd' ) ;
@@ -311,7 +322,8 @@ class MultipartParser extends Transform {
311
322
case STATE . END :
312
323
break ;
313
324
default :
314
- return i ;
325
+ done ( this . _endUnexpected ( ) ) ;
326
+ return ;
315
327
}
316
328
}
317
329
0 commit comments