File tree Expand file tree Collapse file tree 2 files changed +24
-3
lines changed
Expand file tree Collapse file tree 2 files changed +24
-3
lines changed Original file line number Diff line number Diff line change @@ -96,9 +96,10 @@ export default class HeadersHandler {
9696 if ( singleValueHttp2Headers . has ( lowerHeaderName ) ) {
9797 headers [ canonizedKey ] = value [ 0 ] ;
9898 } else {
99- headers [ canonizedKey ] = [ ...value ] ;
99+ headers [ canonizedKey ] = [ ...value ] . filter ( x => ! checkInvalidHeaderChar ( x ) ) ;
100100 }
101101 } else {
102+ if ( checkInvalidHeaderChar ( value ) ) continue ;
102103 headers [ canonizedKey ] = value ;
103104 }
104105 }
@@ -206,6 +207,17 @@ export default class HeadersHandler {
206207 }
207208}
208209
210+ const headerCharRegex = / [ ^ \t \x20 - \x7e \x80 - \xff ] / ;
211+ /**
212+ * True if val contains an invalid field-vchar
213+ * field-value = *( field-content / obs-fold )
214+ * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]
215+ * field-vchar = VCHAR / obs-text
216+ */
217+ function checkInvalidHeaderChar ( val ) : boolean {
218+ return headerCharRegex . test ( val ) ;
219+ }
220+
209221const lowerCaseMap = new Map < string , string > ( ) ;
210222
211223function toLowerCase ( header : string ) : string {
Original file line number Diff line number Diff line change @@ -202,12 +202,21 @@ export default class HttpRequestHandler extends BaseHttpHandler {
202202
203203 private writeResponseHead ( ) : void {
204204 const context = this . context ;
205- const { serverToProxyResponse, proxyToClientResponse } = context ;
205+ const { serverToProxyResponse, proxyToClientResponse, requestSession } = context ;
206206
207207 proxyToClientResponse . statusCode = context . status ;
208208 // write individually so we properly write header-lists
209209 for ( const [ key , value ] of Object . entries ( context . responseHeaders ) ) {
210- proxyToClientResponse . setHeader ( key , value ) ;
210+ try {
211+ proxyToClientResponse . setHeader ( key , value ) ;
212+ } catch ( error ) {
213+ log . info ( `MitmHttpRequest.writeResponseHeadError` , {
214+ sessionId : requestSession . sessionId ,
215+ request : `${ context . method } : ${ context . url . href } ` ,
216+ error,
217+ header : [ key , value ] ,
218+ } ) ;
219+ }
211220 }
212221
213222 serverToProxyResponse . once ( 'trailers' , headers => {
You can’t perform that action at this time.
0 commit comments