Skip to content

Commit d9baeb2

Browse files
authored
Fix memory leak when sending initial metadata in gRPC callouts. (#114)
Signed-off-by: Piotr Sikora <[email protected]>
1 parent b2e6b07 commit d9baeb2

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

proxy_wasm_api.h

+11-6
Original file line numberDiff line numberDiff line change
@@ -1341,9 +1341,12 @@ inline WasmResult grpcCall(std::string_view service, std::string_view service_na
13411341
void *metadata_ptr = nullptr;
13421342
size_t metadata_size = 0;
13431343
MakeHeaderStringPairsBuffer(initial_metadata, &metadata_ptr, &metadata_size);
1344-
return proxy_grpc_call(service.data(), service.size(), service_name.data(), service_name.size(),
1345-
method_name.data(), method_name.size(), metadata_ptr, metadata_size,
1346-
request.data(), request.size(), timeout_milliseconds, token_ptr);
1344+
WasmResult result =
1345+
proxy_grpc_call(service.data(), service.size(), service_name.data(), service_name.size(),
1346+
method_name.data(), method_name.size(), metadata_ptr, metadata_size,
1347+
request.data(), request.size(), timeout_milliseconds, token_ptr);
1348+
::free(metadata_ptr);
1349+
return result;
13471350
}
13481351

13491352
#ifdef PROXY_WASM_PROTOBUF
@@ -1366,9 +1369,11 @@ inline WasmResult grpcStream(std::string_view service, std::string_view service_
13661369
void *metadata_ptr = nullptr;
13671370
size_t metadata_size = 0;
13681371
MakeHeaderStringPairsBuffer(initial_metadata, &metadata_ptr, &metadata_size);
1369-
return proxy_grpc_stream(service.data(), service.size(), service_name.data(), service_name.size(),
1370-
method_name.data(), method_name.size(), metadata_ptr, metadata_size,
1371-
token_ptr);
1372+
WasmResult result = proxy_grpc_stream(service.data(), service.size(), service_name.data(),
1373+
service_name.size(), method_name.data(), method_name.size(),
1374+
metadata_ptr, metadata_size, token_ptr);
1375+
::free(metadata_ptr);
1376+
return result;
13721377
}
13731378

13741379
inline WasmResult grpcCancel(uint32_t token) { return proxy_grpc_cancel(token); }

0 commit comments

Comments
 (0)