@@ -597,17 +597,23 @@ static void sapi_update_response_code(int ncode)
597597 * since zend_llist_del_element only removes one matched item once,
598598 * we should remove them manually
599599 */
600- static void sapi_remove_header (zend_llist * l , char * name , size_t len , bool check_separator )
600+ static void sapi_remove_header (zend_llist * l , char * name , size_t len )
601601{
602602 sapi_header_struct * header ;
603603 zend_llist_element * next ;
604604 zend_llist_element * current = l -> head ;
605605
606+ size_t header_len = len ;
607+ const char * colon = strchr (name , ':' );
608+ if (colon ) {
609+ header_len = (size_t )(colon - name );
610+ }
611+
606612 while (current ) {
607613 header = (sapi_header_struct * )(current -> data );
608614 next = current -> next ;
609- if (header -> header_len > len
610- && (header -> header [len ] == ':' || ! check_separator )
615+ if (header -> header_len > header_len
616+ && (header -> header [header_len ] == ':' || len > header_len )
611617 && !strncasecmp (header -> header , name , len )) {
612618 if (current -> prev ) {
613619 current -> prev -> next = next ;
@@ -655,7 +661,7 @@ static void sapi_header_add_op(sapi_header_op_enum op, sapi_header_struct *sapi_
655661 char sav = * colon_offset ;
656662
657663 * colon_offset = 0 ;
658- sapi_remove_header (& SG (sapi_headers ).headers , sapi_header -> header , strlen (sapi_header -> header ), true );
664+ sapi_remove_header (& SG (sapi_headers ).headers , sapi_header -> header , strlen (sapi_header -> header ));
659665 * colon_offset = sav ;
660666 }
661667 }
@@ -736,7 +742,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
736742 sapi_header .header_len = header_line_len ;
737743 sapi_module .header_handler (& sapi_header , op , & SG (sapi_headers ));
738744 }
739- sapi_remove_header (& SG (sapi_headers ).headers , header_line , header_line_len , op == SAPI_HEADER_DELETE );
745+ sapi_remove_header (& SG (sapi_headers ).headers , header_line , header_line_len );
740746 efree (header_line );
741747 return SUCCESS ;
742748 } else {
0 commit comments