Skip to content

Commit 1131744

Browse files
committed
Fix possible memory leak and improve code
1 parent f7c2bcf commit 1131744

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

swoole_http2_client_coro.cc

+12-16
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ class http2_client
149149
http2_client_stream* create_stream(uint32_t stream_id, bool pipeline);
150150
bool send_window_update(int stream_id, uint32_t size);
151151
bool send_ping_frame();
152-
bool send_data(uint32_t stream_id, zval *data, bool end);
152+
bool send_data(uint32_t stream_id, zval *zdata, bool end);
153153
uint32_t send_request(zval *req);
154154
bool send_goaway_frame(zend_long error_code, const char *debug_data, size_t debug_data_len);
155155
enum swReturn_code parse_frame(zval *return_value);
@@ -1255,52 +1255,48 @@ uint32_t http2_client::send_request(zval *req)
12551255
return stream->stream_id;
12561256
}
12571257

1258-
bool http2_client::send_data(uint32_t stream_id, zval *data, bool end)
1258+
bool http2_client::send_data(uint32_t stream_id, zval *zdata, bool end)
12591259
{
12601260
char buffer[SW_HTTP2_FRAME_HEADER_SIZE];
12611261
http2_client_stream *stream = get_stream(stream_id);
1262+
int flag = end ? SW_HTTP2_FLAG_END_STREAM : 0;
12621263

12631264
if (stream == NULL || stream->type != SW_HTTP2_STREAM_PIPELINE)
12641265
{
12651266
update_error_properties(EINVAL, cpp_string::format("can not found stream#%u", stream_id).c_str());
12661267
return false;
12671268
}
12681269

1269-
int flag = end ? SW_HTTP2_FLAG_END_STREAM : 0;
1270-
1271-
if (ZVAL_IS_ARRAY(data))
1270+
if (ZVAL_IS_ARRAY(zdata))
12721271
{
12731272
size_t len;
12741273
smart_str formstr_s = { 0 };
1275-
char *formstr = php_swoole_http_build_query(data, &len, &formstr_s);
1274+
char *formstr = php_swoole_http_build_query(zdata, &len, &formstr_s);
12761275
if (formstr == NULL)
12771276
{
12781277
php_swoole_error(E_WARNING, "http_build_query failed");
12791278
return false;
12801279
}
1281-
memset(buffer, 0, SW_HTTP2_FRAME_HEADER_SIZE);
12821280
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_DATA, len, flag, stream_id);
12831281
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_GREEN ", END, STREAM#%d] length=%zu", swHttp2_get_type(SW_HTTP2_TYPE_DATA), stream_id, len);
12841282
if (!send(buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send(formstr, len))
12851283
{
1284+
smart_str_free(&formstr_s);
12861285
return false;
12871286
}
12881287
smart_str_free(&formstr_s);
12891288
}
1290-
else if (Z_TYPE_P(data) == IS_STRING)
1289+
else
12911290
{
1292-
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_DATA, Z_STRLEN_P(data), flag, stream_id);
1293-
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_GREEN ", END, STREAM#%d] length=%zu", swHttp2_get_type(SW_HTTP2_TYPE_DATA), stream_id, Z_STRLEN_P(data));
1294-
if (!send(buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send(Z_STRVAL_P(data), Z_STRLEN_P(data)))
1291+
zend::string data(zdata);
1292+
swHttp2_set_frame_header(buffer, SW_HTTP2_TYPE_DATA, data.len(), flag, stream_id);
1293+
swTraceLog(SW_TRACE_HTTP2, "[" SW_ECHO_GREEN ", END, STREAM#%d] length=%zu", swHttp2_get_type(SW_HTTP2_TYPE_DATA), stream_id, data.len());
1294+
if (!send(buffer, SW_HTTP2_FRAME_HEADER_SIZE) || !send(data.val(), data.len()))
12951295
{
12961296
return false;
12971297
}
12981298
}
1299-
else
1300-
{
1301-
php_swoole_error(E_WARNING, "unknown data type[%d]", Z_TYPE_P(data) );
1302-
return false;
1303-
}
1299+
13041300
return true;
13051301
}
13061302

0 commit comments

Comments
 (0)