Re: com php-src: Fixed bug Fixed bug #61605 (header_remove() does not remove all headers): NEWS main/SAPI.c sapi/cgi/tests/bug61605.phpt

From: Date: Wed, 04 Apr 2012 09:03:05 +0000
Subject: Re: com php-src: Fixed bug Fixed bug #61605 (header_remove() does not remove all headers): NEWS main/SAPI.c sapi/cgi/tests/bug61605.phpt
References: 1 2  Groups: php.cvs 
Request: Send a blank email to php-cvs+get-68665@lists.php.net to get a copy of this message
On Wed, Apr 4, 2012 at 4:54 PM, Alexey Shein <confik@gmail.com> wrote: > 4 апреля 2012 г. 13:14 пользователь Xinchen Hui <laruence@php.net> > написал: >> Commit:    efd671f242e87e3301a1b3e76179955f26119feb >> Author:    Xinchen Hui <laruence@gmail.com>         Wed, 4 Apr 2012 16:14:28 >> +0800 >> Parents:   3ea9fa1b4626f6125f25d8b0bcffac7becc1d092 >> Branches:  PHP-5.4 >> >> Link:       >> http://git.php.net/?p=php-src.git;a=commitdiff;h=efd671f242e87e3301a1b3e76179955f26119feb >> >> Log: >> Fixed bug Fixed bug #61605 (header_remove() does not remove all headers) >> >> Bugs: >> https://bugs.php.net/61605 >> >> Changed paths: >>  M  NEWS >>  M  main/SAPI.c >>  A  sapi/cgi/tests/bug61605.phpt >> >> >> Diff: >> diff --git a/NEWS b/NEWS >> index 6fc9126..b8b28b1 100644 >> --- a/NEWS >> +++ b/NEWS >> @@ -9,6 +9,8 @@ PHP                                                 >>                        NEWS >>   . "Connection: close" instead of "Connection: closed" (Gustavo) >> >>  - Core: >> +  . Fixed bug Fixed bug #61605 (header_remove() does not remove all headers). >> +    (Laruence) > > Double Fixed bug (maybe you fixed it twice :) ) > >>   . Fixed bug #61374 (html_entity_decode tries to decode code points that don't >>     exist in ISO-8859-1). (Gustavo) >>   . Fixed bug #61273 (call_user_func_array with more than 16333 arguments >> diff --git a/main/SAPI.c b/main/SAPI.c >> index 74fdbb2..0d3b4ef 100644 >> --- a/main/SAPI.c >> +++ b/main/SAPI.c >> @@ -587,10 +587,36 @@ static void sapi_update_response_code(int ncode TSRMLS_DC) >>        SG(sapi_headers).http_response_code = ncode; >>  } >> >> -static int sapi_find_matching_header(void *element1, void *element2) >> -{ >> -       int len = strlen((char*)element2); >> -       return strncasecmp(((sapi_header_struct*)element1)->header, (char*)element2, >> len) == 0 && ((sapi_header_struct*)element1)->header[len] == ':'; >> +/* >> + * since zend_llist_del_element only remove one matched item once, >> + * we should remove them by ourself >> + */ >> +static void sapi_remove_header(zend_llist *l, char *name, uint len) { >> +       sapi_header_struct *header; >> +       zend_llist_element *next; >> +       zend_llist_element *current=l->head; >> + >> +       while (current) { >> +               header = (sapi_header_struct *)(current->data); >> +               next = current->next; >> +               if (header->header_len > len && header->header[len] >> == ':' >> +                               && !strncasecmp(header->header, >> name, len)) { >> +                       if (current->prev) { >> +                               current->prev->next = next; >> +                       } else { >> +                               l->head = next; >> +                       } >> +                       if (next) { >> +                               next->prev = current->prev; >> +                       } else { >> +                               l->tail = current->prev; >> +                       } >> +                       sapi_free_header(header); >> +                       efree(current); >> +                       --l->count; >> +               } >> +               current = next; >> +       } >>  } >> >>  SAPI_API int sapi_add_header_ex(char *header_line, uint header_line_len, zend_bool >> duplicate, zend_bool replace TSRMLS_DC) >> @@ -621,7 +647,7 @@ static void sapi_header_add_op(sapi_header_op_enum op, >> sapi_header_struct *sapi_ >>                                char sav = *colon_offset; >> >>                                *colon_offset = 0; >> -                               >> zend_llist_del_element(&SG(sapi_headers)..headers, sapi_header->header, (int(*)(void*, >> void*))sapi_find_matching_header); >> +                       sapi_remove_header(&SG(sapi_headers).headers, >> sapi_header->header, strlen(sapi_header->header)); >>                                *colon_offset = sav; >>                        } >>                } >> @@ -703,7 +729,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg >> TSRMLS_DC) >>                        sapi_header.header_len = header_line_len; >>                        sapi_module.header_handler(&sapi_header, op, >> &SG(sapi_headers) TSRMLS_CC); >>                } >> -               zend_llist_del_element(&SG(sapi_headers).headers, header_line, >> (int(*)(void*, void*))sapi_find_matching_header); >> +               sapi_remove_header(&SG(sapi_headers).headers, header_line, >> header_line_len); >>                efree(header_line); >>                return SUCCESS; >>        } else { >> diff --git a/sapi/cgi/tests/bug61605.phpt b/sapi/cgi/tests/bug61605.phpt >> new file mode 100644 >> index 0000000..c6e4cf2 >> --- /dev/null >> +++ b/sapi/cgi/tests/bug61605.phpt >> @@ -0,0 +1,34 @@ >> +--TEST-- >> +Bug #61605 (header_remove() does not remove all headers) >> +--SKIPIF-- >> +<?php include "skipif.inc"; ?> >> +--GET-- >> +foo=bar >> +--FILE-- >> +<?php >> +header("A: first"); >> +header("A: second", TRUE); >> +$headers1 = headers_list(); >> +header("A: third", FALSE); >> +$headers2 = headers_list(); >> +header_remove("A"); >> +$headers3 = headers_list(); >> +print_r($headers1); >> +print_r($headers2); >> +print_r($headers3); >> +--EXPECTF-- >> +Array >> +( >> +    [0] => X-Powered-By: %s >> +    [1] => A: second >> +) >> +Array >> +( >> +    [0] => X-Powered-By: %s >> +    [1] => A: second >> +    [2] => A: third >> +) >> +Array >> +( >> +    [0] => X-Powered-By: %s >> +) >> >> >> -- >> PHP CVS Mailing List (http://www.php.net/) >> To unsubscribe, visit: http://www.php.net/unsub.php >> > > > > -- > Regards, > Shein Alexey seems right here https://github.com/php/php-src/network.. maybe the ci message is wrong. thanks -- Laruence  Xinchen Hui http://www.laruence.com/

« previous php.cvs (#68665) next »