@@ -597,18 +597,12 @@ 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 )
600+ static void sapi_remove_header (zend_llist * l , char * name , size_t len , size_t header_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-
612606 while (current ) {
613607 header = (sapi_header_struct * )(current -> data );
614608 next = current -> next ;
@@ -661,7 +655,7 @@ static void sapi_header_add_op(sapi_header_op_enum op, sapi_header_struct *sapi_
661655 char sav = * colon_offset ;
662656
663657 * colon_offset = 0 ;
664- sapi_remove_header (& SG (sapi_headers ).headers , sapi_header -> header , strlen (sapi_header -> header ));
658+ sapi_remove_header (& SG (sapi_headers ).headers , sapi_header -> header , strlen (sapi_header -> header ), 0 );
665659 * colon_offset = sav ;
666660 }
667661 }
@@ -676,7 +670,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
676670 sapi_header_struct sapi_header ;
677671 char * colon_offset ;
678672 char * header_line ;
679- size_t header_line_len ;
673+ size_t header_line_len , header_len ;
680674 int http_response_code ;
681675
682676 if (SG (headers_sent ) && !SG (request_info ).no_headers ) {
@@ -708,7 +702,13 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
708702 }
709703 header_line = estrndup (p -> line , p -> line_len );
710704 header_line_len = p -> line_len ;
711- http_response_code = p -> response_code ;
705+ if (op == SAPI_HEADER_DELETE_PREFIX ) {
706+ header_len = p -> header_len ;
707+ http_response_code = 0 ;
708+ } else {
709+ header_len = 0 ;
710+ http_response_code = p -> response_code ;
711+ }
712712 break ;
713713 }
714714
@@ -742,7 +742,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg)
742742 sapi_header .header_len = header_line_len ;
743743 sapi_module .header_handler (& sapi_header , op , & SG (sapi_headers ));
744744 }
745- sapi_remove_header (& SG (sapi_headers ).headers , header_line , header_line_len );
745+ sapi_remove_header (& SG (sapi_headers ).headers , header_line , header_line_len , header_len );
746746 efree (header_line );
747747 return SUCCESS ;
748748 } else {
0 commit comments