@@ -812,6 +812,8 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
812812 ngx_uint_t i ;
813813 u_char * content_length_hdr = NULL ;
814814 u_char content_length_hdr_len = 0 ;
815+ u_char * status_length_hdr = NULL ;
816+ u_char status_length_hdr_len = 0 ;
815817 char * lowcase_key ;
816818 char * val ;
817819 ngx_list_part_t * part ;
@@ -885,6 +887,20 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
885887 size += sizeof ("transfer-encoding" ) + sizeof ("chunked" );
886888 }
887889
890+ if (r -> headers_out .status ) {
891+ count ++ ;
892+ status_length_hdr = ngx_pcalloc (r -> pool , NGX_INT_T_LEN );
893+ if (status_length_hdr == NULL ) {
894+ ngx_log_error (NGX_LOG_ERR , log , 0 , "no memory" );
895+ return PROXY_RESULT_INTERNAL_FAILURE ;
896+ }
897+
898+ status_length_hdr_len = ngx_snprintf (status_length_hdr , NGX_INT_T_LEN , "%ui" ,
899+ r -> headers_out .status ) - status_length_hdr ;
900+
901+ size += sizeof (":status" ) + status_length_hdr_len + 1 ;
902+ }
903+
888904 size += 4 + count * 2 * 4 ;
889905 buf = ngx_http_wasm_get_buf_to_write (log , size , addr , size_addr );
890906 if (buf == NULL ) {
@@ -953,6 +969,13 @@ ngx_http_wasm_resp_get_headers(ngx_http_request_t *r, int32_t addr, int32_t size
953969 proxy_wasm_map_reserve_literal (& it , "transfer-encoding" , "chunked" );
954970 }
955971
972+ if (status_length_hdr != NULL ) {
973+ proxy_wasm_map_reserve (& it , & lowcase_key , sizeof (":status" ) - 1 ,
974+ & val , status_length_hdr_len );
975+ ngx_memcpy (lowcase_key , ":status" , sizeof (":status" ) - 1 );
976+ ngx_memcpy (val , status_length_hdr , status_length_hdr_len );
977+ }
978+
956979 return PROXY_RESULT_OK ;
957980}
958981
0 commit comments