@@ -25,23 +25,24 @@ static zend_string *get_http_headers(php_stream *socketd);
2525#define smart_str_append_const (str , const ) \
2626 smart_str_appendl(str,const,sizeof(const)-1)
2727
28- static void soap_smart_str_append_header_value (smart_str * dest , const zend_string * value , const char * header_name )
28+ static void soap_smart_str_append_header_value_ex (smart_str * dest , const char * src , size_t len , const char * header_name )
2929{
30- const char * src = ZSTR_VAL (value );
31- size_t len = ZSTR_LEN (value );
3230 size_t i = 0 ;
3331 while (i < len && src [i ] != '\r' && src [i ] != '\n' ) {
3432 i ++ ;
3533 }
34+ smart_str_appendl (dest , src , i );
3635 if (i < len ) {
37- smart_str_appendl (dest , src , i );
3836 php_error_docref (NULL , E_WARNING ,
3937 "Header %s value contains newline characters and has been truncated" , header_name );
40- } else {
41- smart_str_append (dest , value );
4238 }
4339}
4440
41+ static void soap_smart_str_append_header_value (smart_str * dest , const zend_string * value , const char * header_name )
42+ {
43+ soap_smart_str_append_header_value_ex (dest , ZSTR_VAL (value ), ZSTR_LEN (value ), header_name );
44+ }
45+
4546/* Proxy HTTP Authentication */
4647bool proxy_authentication (zval * this_ptr , smart_str * soap_headers )
4748{
@@ -656,13 +657,13 @@ bool make_http_soap_request(
656657 Z_STRLEN_P (tmp ) > 0
657658 ) {
658659 smart_str_append_const (& soap_headers , "Content-Type: " );
659- smart_str_append (& soap_headers , Z_STR_P (tmp ));
660+ soap_smart_str_append_header_value (& soap_headers , Z_STR_P (tmp ), "Content-Type" );
660661 } else {
661662 smart_str_append_const (& soap_headers , "Content-Type: application/soap+xml; charset=utf-8" );
662663 }
663664 if (soapaction ) {
664665 smart_str_append_const (& soap_headers ,"; action=\"" );
665- smart_str_appends (& soap_headers , soapaction );
666+ soap_smart_str_append_header_value_ex (& soap_headers , soapaction , strlen ( soapaction ), "SOAPAction" );
666667 smart_str_append_const (& soap_headers ,"\"" );
667668 }
668669 smart_str_append_const (& soap_headers ,"\r\n" );
@@ -673,14 +674,14 @@ bool make_http_soap_request(
673674 Z_STRLEN_P (tmp ) > 0
674675 ) {
675676 smart_str_append_const (& soap_headers , "Content-Type: " );
676- smart_str_append (& soap_headers , Z_STR_P (tmp ));
677+ soap_smart_str_append_header_value (& soap_headers , Z_STR_P (tmp ), "Content-Type" );
677678 smart_str_append_const (& soap_headers , "\r\n" );
678679 } else {
679680 smart_str_append_const (& soap_headers , "Content-Type: text/xml; charset=utf-8\r\n" );
680681 }
681682 if (soapaction ) {
682683 smart_str_append_const (& soap_headers , "SOAPAction: \"" );
683- smart_str_appends (& soap_headers , soapaction );
684+ soap_smart_str_append_header_value_ex (& soap_headers , soapaction , strlen ( soapaction ), "SOAPAction" );
684685 smart_str_append_const (& soap_headers , "\"\r\n" );
685686 }
686687 }
@@ -892,9 +893,9 @@ bool make_http_soap_request(
892893 smart_str_appends (& soap_headers , "; " );
893894 }
894895 first_cookie = false;
895- smart_str_append (& soap_headers , key );
896+ soap_smart_str_append_header_value (& soap_headers , key , "Cookie" );
896897 smart_str_appendc (& soap_headers , '=' );
897- smart_str_append (& soap_headers , Z_STR_P (value ));
898+ soap_smart_str_append_header_value (& soap_headers , Z_STR_P (value ), "Cookie" );
898899 }
899900 }
900901 }
0 commit comments