1010#define FFI_NO_REQ_CTX -100
1111#define FFI_BAD_CONTEXT -101
1212
13+ #define must_get_memory (key , log , key_data , key_len ) \
14+ key = (char *) ngx_wasm_vm.get_memory((log), (key_data), (key_size)); \
15+ if (key == NULL) { \
16+ return PROXY_RESULT_INVALID_MEMORY_ACCESS; \
17+ }
18+ #define must_get_req (r ) \
19+ r = ngx_http_wasm_get_req(); \
20+ if (r == NULL) { \
21+ return PROXY_RESULT_BAD_ARGUMENT; \
22+ }
23+
1324
1425static int (* set_resp_header ) (ngx_http_request_t * r ,
1526 const char * key_data , size_t key_len , int is_nil ,
@@ -388,6 +399,23 @@ int32_t
388399proxy_replace_header_map_value (int32_t type , int32_t key_data , int32_t key_size ,
389400 int32_t data , int32_t size )
390401{
402+ ngx_int_t rc ;
403+ ngx_log_t * log ;
404+ ngx_http_request_t * r ;
405+ char * key , * val ;
406+
407+ log = ngx_http_wasm_get_log ();
408+ must_get_req (r );
409+ must_get_memory (key , log , key_data , key_len );
410+ must_get_memory (val , log , data , size );
411+
412+ if (type == PROXY_MAP_TYPE_HTTP_RESPONSE_HEADERS ) {
413+ rc = ngx_http_wasm_set_resp_header (r , key , key_size , 0 , val , size , 1 );
414+ if (rc != NGX_OK ) {
415+ return PROXY_RESULT_BAD_ARGUMENT ;
416+ }
417+ }
418+
391419 return PROXY_RESULT_OK ;
392420}
393421
@@ -402,20 +430,9 @@ proxy_add_header_map_value(int32_t type, int32_t key_data, int32_t key_size,
402430 char * key , * val ;
403431
404432 log = ngx_http_wasm_get_log ();
405- r = ngx_http_wasm_get_req ();
406- if (r == NULL ) {
407- return PROXY_RESULT_BAD_ARGUMENT ;
408- }
409-
410- key = (char * ) ngx_wasm_vm .get_memory (log , key_data , key_size );
411- if (key == NULL ) {
412- return PROXY_RESULT_INVALID_MEMORY_ACCESS ;
413- }
414-
415- val = (char * ) ngx_wasm_vm .get_memory (log , data , size );
416- if (val == NULL ) {
417- return PROXY_RESULT_INVALID_MEMORY_ACCESS ;
418- }
433+ must_get_req (r );
434+ must_get_memory (key , log , key_data , key_len );
435+ must_get_memory (val , log , data , size );
419436
420437 if (type == PROXY_MAP_TYPE_HTTP_RESPONSE_HEADERS ) {
421438 rc = ngx_http_wasm_set_resp_header (r , key , key_size , 0 , val , size , 0 );
0 commit comments