Skip to content

Commit 75dc67c

Browse files
committed
MNDR:
- move macro to a function
1 parent 2ea4891 commit 75dc67c

File tree

1 file changed

+66
-40
lines changed

1 file changed

+66
-40
lines changed

ext/mysqlnd/mysqlnd_wireprotocol.c

+66-40
Original file line numberDiff line numberDiff line change
@@ -29,38 +29,8 @@
2929
#include "zend_ini.h"
3030

3131
#define MYSQLND_SILENT 1
32-
3332
#define MYSQLND_DUMP_HEADER_N_BODY
3433

35-
#define PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_size, packet_type_as_text, packet_type) \
36-
{ \
37-
DBG_INF_FMT("buf=%p size=%u", (buf), (buf_size)); \
38-
if (FAIL == mysqlnd_read_header((conn)->net, &((packet)->header), (conn)->stats, ((conn)->error_info))) {\
39-
CONN_SET_STATE(conn, CONN_QUIT_SENT); \
40-
SET_CLIENT_ERROR(*conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\
41-
php_error_docref(NULL, E_WARNING, "%s", mysqlnd_server_gone); \
42-
DBG_ERR_FMT("Can't read %s's header", (packet_type_as_text)); \
43-
DBG_RETURN(FAIL);\
44-
}\
45-
if ((buf_size) < (packet)->header.size) { \
46-
DBG_ERR_FMT("Packet buffer %u wasn't big enough %u, %u bytes will be unread", \
47-
(buf_size), (packet)->header.size, (packet)->header.size - (buf_size)); \
48-
DBG_RETURN(FAIL); \
49-
}\
50-
if (FAIL == conn->net->data->m.receive_ex((conn)->net, (buf), (packet)->header.size, (conn)->stats, ((conn)->error_info))) { \
51-
CONN_SET_STATE(conn, CONN_QUIT_SENT); \
52-
SET_CLIENT_ERROR(*conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);\
53-
php_error_docref(NULL, E_WARNING, "%s", mysqlnd_server_gone); \
54-
DBG_ERR_FMT("Empty '%s' packet body", (packet_type_as_text)); \
55-
DBG_RETURN(FAIL);\
56-
} \
57-
MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn->stats, packet_type_to_statistic_byte_count[packet_type], \
58-
MYSQLND_HEADER_SIZE + (packet)->header.size, \
59-
packet_type_to_statistic_packet_count[packet_type], \
60-
1); \
61-
}
62-
63-
6434
#define BAIL_IF_NO_MORE_DATA \
6535
if ((size_t)(p - begin) > packet->header.size) { \
6636
php_error_docref(NULL, E_WARNING, "Premature end of data (mysqlnd_wireprotocol.c:%u)", __LINE__); \
@@ -316,6 +286,42 @@ mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_PACKET_HEADER * header,
316286
/* }}} */
317287

318288

289+
/* {{{ mysqlnd_read_packet_header_and_body */
290+
static enum_func_status
291+
mysqlnd_read_packet_header_and_body(MYSQLND_PACKET_HEADER * packet_header, MYSQLND_CONN_DATA * conn,
292+
zend_uchar * buf, size_t buf_size, const char * const packet_type_as_text,
293+
enum mysqlnd_packet_type packet_type)
294+
{
295+
DBG_ENTER("mysqlnd_read_packet_header_and_body");
296+
DBG_INF_FMT("buf=%p size=%u", buf, buf_size);
297+
if (FAIL == mysqlnd_read_header(conn->net, packet_header, conn->stats, conn->error_info)) {
298+
CONN_SET_STATE(conn, CONN_QUIT_SENT);
299+
SET_CLIENT_ERROR(*conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
300+
php_error_docref(NULL, E_WARNING, "%s", mysqlnd_server_gone);
301+
DBG_ERR_FMT("Can't read %s's header", packet_type_as_text);
302+
DBG_RETURN(FAIL);
303+
}
304+
if (buf_size < packet_header->size) {
305+
DBG_ERR_FMT("Packet buffer %u wasn't big enough %u, %u bytes will be unread",
306+
buf_size, packet_header->size, packet_header->size - buf_size);
307+
DBG_RETURN(FAIL);
308+
}
309+
if (FAIL == conn->net->data->m.receive_ex(conn->net, buf, packet_header->size, conn->stats, conn->error_info)) {
310+
CONN_SET_STATE(conn, CONN_QUIT_SENT);
311+
SET_CLIENT_ERROR(*conn->error_info, CR_SERVER_GONE_ERROR, UNKNOWN_SQLSTATE, mysqlnd_server_gone);
312+
php_error_docref(NULL, E_WARNING, "%s", mysqlnd_server_gone);
313+
DBG_ERR_FMT("Empty '%s' packet body", packet_type_as_text);
314+
DBG_RETURN(FAIL);
315+
}
316+
MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn->stats, packet_type_to_statistic_byte_count[packet_type],
317+
MYSQLND_HEADER_SIZE + packet_header->size,
318+
packet_type_to_statistic_packet_count[packet_type],
319+
1);
320+
DBG_RETURN(PASS);
321+
}
322+
/* }}} */
323+
324+
319325
/* {{{ php_mysqlnd_greet_read */
320326
static enum_func_status
321327
php_mysqlnd_greet_read(void * _packet, MYSQLND_CONN_DATA * conn)
@@ -328,7 +334,9 @@ php_mysqlnd_greet_read(void * _packet, MYSQLND_CONN_DATA * conn)
328334

329335
DBG_ENTER("php_mysqlnd_greet_read");
330336

331-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "greeting", PROT_GREET_PACKET);
337+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, sizeof(buf), "greeting", PROT_GREET_PACKET)) {
338+
DBG_RETURN(FAIL);
339+
}
332340
BAIL_IF_NO_MORE_DATA;
333341

334342
packet->auth_plugin_data = packet->intern_auth_plugin_data;
@@ -690,7 +698,9 @@ php_mysqlnd_auth_response_read(void * _packet, MYSQLND_CONN_DATA * conn)
690698

691699
/* leave space for terminating safety \0 */
692700
buf_len--;
693-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "OK", PROT_OK_PACKET);
701+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "OK", PROT_OK_PACKET)) {
702+
DBG_RETURN(FAIL);
703+
}
694704
BAIL_IF_NO_MORE_DATA;
695705

696706
/*
@@ -851,7 +861,9 @@ php_mysqlnd_ok_read(void * _packet, MYSQLND_CONN_DATA * conn)
851861

852862
DBG_ENTER("php_mysqlnd_ok_read");
853863

854-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "OK", PROT_OK_PACKET);
864+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "OK", PROT_OK_PACKET)) {
865+
DBG_RETURN(FAIL);
866+
}
855867
BAIL_IF_NO_MORE_DATA;
856868

857869
/* Should be always 0x0 or ERROR_MARKER for error */
@@ -941,7 +953,9 @@ php_mysqlnd_eof_read(void * _packet, MYSQLND_CONN_DATA * conn)
941953

942954
DBG_ENTER("php_mysqlnd_eof_read");
943955

944-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "EOF", PROT_EOF_PACKET);
956+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "EOF", PROT_EOF_PACKET)) {
957+
DBG_RETURN(FAIL);
958+
}
945959
BAIL_IF_NO_MORE_DATA;
946960

947961
/* Should be always EODATA_MARKER */
@@ -1092,7 +1106,9 @@ php_mysqlnd_rset_header_read(void * _packet, MYSQLND_CONN_DATA * conn)
10921106

10931107
DBG_ENTER("php_mysqlnd_rset_header_read");
10941108

1095-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "resultset header", PROT_RSET_HEADER_PACKET);
1109+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "resultset header", PROT_RSET_HEADER_PACKET)) {
1110+
DBG_RETURN(FAIL);
1111+
}
10961112
BAIL_IF_NO_MORE_DATA;
10971113

10981114
/*
@@ -1234,7 +1250,9 @@ php_mysqlnd_rset_field_read(void * _packet, MYSQLND_CONN_DATA * conn)
12341250

12351251
DBG_ENTER("php_mysqlnd_rset_field_read");
12361252

1237-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "field", PROT_RSET_FLD_PACKET);
1253+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "field", PROT_RSET_FLD_PACKET)) {
1254+
DBG_RETURN(FAIL);
1255+
}
12381256

12391257
if (packet->skip_parsing) {
12401258
DBG_RETURN(PASS);
@@ -1913,7 +1931,9 @@ php_mysqlnd_stats_read(void * _packet, MYSQLND_CONN_DATA * conn)
19131931

19141932
DBG_ENTER("php_mysqlnd_stats_read");
19151933

1916-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "statistics", PROT_STATS_PACKET);
1934+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "statistics", PROT_STATS_PACKET)) {
1935+
DBG_RETURN(FAIL);
1936+
}
19171937

19181938
packet->message = mnd_emalloc(packet->header.size + 1);
19191939
memcpy(packet->message, buf, packet->header.size);
@@ -1959,7 +1979,9 @@ php_mysqlnd_prepare_read(void * _packet, MYSQLND_CONN_DATA * conn)
19591979

19601980
DBG_ENTER("php_mysqlnd_prepare_read");
19611981

1962-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "prepare", PROT_PREPARE_RESP_PACKET);
1982+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "prepare", PROT_PREPARE_RESP_PACKET)) {
1983+
DBG_RETURN(FAIL);
1984+
}
19631985
BAIL_IF_NO_MORE_DATA;
19641986

19651987
data_size = packet->header.size;
@@ -2046,7 +2068,9 @@ php_mysqlnd_chg_user_read(void * _packet, MYSQLND_CONN_DATA * conn)
20462068

20472069
DBG_ENTER("php_mysqlnd_chg_user_read");
20482070

2049-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_len, "change user response", PROT_CHG_USER_RESP_PACKET);
2071+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, buf_len, "change user response", PROT_CHG_USER_RESP_PACKET)) {
2072+
DBG_RETURN(FAIL);
2073+
}
20502074
BAIL_IF_NO_MORE_DATA;
20512075

20522076
/*
@@ -2164,7 +2188,9 @@ php_mysqlnd_sha256_pk_request_response_read(void * _packet, MYSQLND_CONN_DATA *
21642188
DBG_ENTER("php_mysqlnd_sha256_pk_request_response_read");
21652189

21662190
/* leave space for terminating safety \0 */
2167-
PACKET_READ_HEADER_AND_BODY(packet, conn, buf, sizeof(buf), "SHA256_PK_REQUEST_RESPONSE", PROT_SHA256_PK_REQUEST_RESPONSE_PACKET);
2191+
if (FAIL == mysqlnd_read_packet_header_and_body(&(packet->header), conn, buf, sizeof(buf), "SHA256_PK_REQUEST_RESPONSE", PROT_SHA256_PK_REQUEST_RESPONSE_PACKET)) {
2192+
DBG_RETURN(FAIL);
2193+
}
21682194
BAIL_IF_NO_MORE_DATA;
21692195

21702196
p++;

0 commit comments

Comments
 (0)