diff options
Diffstat (limited to 'ext/mysqlnd/mysqlnd_wireprotocol.c')
| -rw-r--r-- | ext/mysqlnd/mysqlnd_wireprotocol.c | 80 |
1 files changed, 73 insertions, 7 deletions
diff --git a/ext/mysqlnd/mysqlnd_wireprotocol.c b/ext/mysqlnd/mysqlnd_wireprotocol.c index 84a025a887..ecce71d9c2 100644 --- a/ext/mysqlnd/mysqlnd_wireprotocol.c +++ b/ext/mysqlnd/mysqlnd_wireprotocol.c @@ -67,12 +67,16 @@ goto premature_end; \ } \ + static const char *unknown_sqlstate= "HY000"; + const char * const mysqlnd_empty_string = ""; + /* Used in mysqlnd_debug.c */ const char mysqlnd_read_header_name[] = "mysqlnd_read_header"; const char mysqlnd_read_body_name[] = "mysqlnd_read_body"; + #define ERROR_MARKER 0xFF #define EODATA_MARKER 0xFE @@ -91,7 +95,9 @@ const char * const mysqlnd_command_to_text[COM_END] = }; /* }}} */ -static enum_mysqlnd_collected_stats packet_type_to_statistic_byte_count[PROT_LAST] /* {{{ */ = + + +static enum_mysqlnd_collected_stats packet_type_to_statistic_byte_count[PROT_LAST] = { STAT_LAST, STAT_LAST, @@ -104,9 +110,8 @@ static enum_mysqlnd_collected_stats packet_type_to_statistic_byte_count[PROT_LAS STAT_BYTES_RECEIVED_PREPARE_RESPONSE, STAT_BYTES_RECEIVED_CHANGE_USER, }; -/* }}} */ -static enum_mysqlnd_collected_stats packet_type_to_statistic_packet_count[PROT_LAST] /* {{{ */ = +static enum_mysqlnd_collected_stats packet_type_to_statistic_packet_count[PROT_LAST] = { STAT_LAST, STAT_LAST, @@ -119,7 +124,7 @@ static enum_mysqlnd_collected_stats packet_type_to_statistic_packet_count[PROT_L STAT_PACKETS_RECEIVED_PREPARE_RESPONSE, STAT_PACKETS_RECEIVED_CHANGE_USER, }; -/* }}} */ + /* {{{ php_mysqlnd_net_field_length Get next field's length */ @@ -150,6 +155,7 @@ php_mysqlnd_net_field_length(zend_uchar **packet) } /* }}} */ + /* {{{ php_mysqlnd_net_field_length_ll Get next field's length */ uint64_t @@ -179,6 +185,7 @@ php_mysqlnd_net_field_length_ll(zend_uchar **packet) } /* }}} */ + /* {{{ php_mysqlnd_net_store_length */ zend_uchar * php_mysqlnd_net_store_length(zend_uchar *packet, uint64_t length) @@ -205,6 +212,7 @@ php_mysqlnd_net_store_length(zend_uchar *packet, uint64_t length) } /* }}} */ + /* {{{ php_mysqlnd_net_store_length_size */ size_t php_mysqlnd_net_store_length_size(uint64_t length) @@ -222,6 +230,7 @@ php_mysqlnd_net_store_length_size(uint64_t length) } /* }}} */ + /* {{{ php_mysqlnd_read_error_from_line */ static enum_func_status php_mysqlnd_read_error_from_line(zend_uchar *buf, size_t buf_len, @@ -265,6 +274,7 @@ end: } /* }}} */ + /* {{{ mysqlnd_read_header */ static enum_func_status mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_PACKET_HEADER * header, @@ -307,6 +317,7 @@ mysqlnd_read_header(MYSQLND_NET * net, MYSQLND_PACKET_HEADER * header, } /* }}} */ + /* {{{ php_mysqlnd_greet_read */ static enum_func_status php_mysqlnd_greet_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -442,6 +453,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_greet_free_mem */ static void php_mysqlnd_greet_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -465,6 +477,7 @@ void php_mysqlnd_greet_free_mem(void * _packet, zend_bool stack_allocation TSRML } /* }}} */ + #define AUTH_WRITE_BUFFER_LEN (MYSQLND_HEADER_SIZE + MYSQLND_MAX_ALLOWED_USER_LEN + SCRAMBLE_LENGTH + MYSQLND_MAX_ALLOWED_DB_LEN + 1 + 4096) /* {{{ php_mysqlnd_auth_write */ @@ -610,6 +623,7 @@ size_t php_mysqlnd_auth_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC } /* }}} */ + /* {{{ php_mysqlnd_auth_free_mem */ static void php_mysqlnd_auth_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -621,6 +635,7 @@ void php_mysqlnd_auth_free_mem(void * _packet, zend_bool stack_allocation TSRMLS } /* }}} */ + #define AUTH_RESP_BUFFER_SIZE 2048 /* {{{ php_mysqlnd_auth_response_read */ @@ -714,6 +729,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_auth_response_free_mem */ static void php_mysqlnd_auth_response_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -741,6 +757,7 @@ php_mysqlnd_auth_response_free_mem(void * _packet, zend_bool stack_allocation TS } /* }}} */ + /* {{{ php_mysqlnd_change_auth_response_write */ static size_t php_mysqlnd_change_auth_response_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -769,6 +786,7 @@ php_mysqlnd_change_auth_response_write(void * _packet, MYSQLND_CONN_DATA * conn } /* }}} */ + /* {{{ php_mysqlnd_change_auth_response_free_mem */ static void php_mysqlnd_change_auth_response_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -780,6 +798,7 @@ php_mysqlnd_change_auth_response_free_mem(void * _packet, zend_bool stack_alloca } /* }}} */ + #define OK_BUFFER_SIZE 2048 /* {{{ php_mysqlnd_ok_read */ @@ -851,6 +870,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_ok_free_mem */ static void php_mysqlnd_ok_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -866,6 +886,7 @@ php_mysqlnd_ok_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) } /* }}} */ + /* {{{ php_mysqlnd_eof_read */ static enum_func_status php_mysqlnd_eof_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -932,6 +953,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_eof_free_mem */ static void php_mysqlnd_eof_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -942,6 +964,7 @@ void php_mysqlnd_eof_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_ } /* }}} */ + /* {{{ php_mysqlnd_cmd_write */ size_t php_mysqlnd_cmd_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) { @@ -1006,6 +1029,7 @@ end: } /* }}} */ + /* {{{ php_mysqlnd_cmd_free_mem */ static void php_mysqlnd_cmd_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -1017,6 +1041,7 @@ void php_mysqlnd_cmd_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_ } /* }}} */ + /* {{{ php_mysqlnd_rset_header_read */ static enum_func_status php_mysqlnd_rset_header_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -1121,6 +1146,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_rset_header_free_mem */ static void php_mysqlnd_rset_header_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -1138,7 +1164,7 @@ void php_mysqlnd_rset_header_free_mem(void * _packet, zend_bool stack_allocation } /* }}} */ -static size_t rset_field_offsets[] /* {{{ */ = +static size_t rset_field_offsets[] = { STRUCT_OFFSET(MYSQLND_FIELD, catalog), STRUCT_OFFSET(MYSQLND_FIELD, catalog_length), @@ -1153,7 +1179,7 @@ static size_t rset_field_offsets[] /* {{{ */ = STRUCT_OFFSET(MYSQLND_FIELD, org_name), STRUCT_OFFSET(MYSQLND_FIELD, org_name_length) }; -/* }}} */ + /* {{{ php_mysqlnd_rset_field_read */ static enum_func_status @@ -1351,6 +1377,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_rset_field_free_mem */ static void php_mysqlnd_rset_field_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -1363,6 +1390,7 @@ void php_mysqlnd_rset_field_free_mem(void * _packet, zend_bool stack_allocation } /* }}} */ + /* {{{ php_mysqlnd_read_row_ex */ static enum_func_status php_mysqlnd_read_row_ex(MYSQLND_CONN_DATA * conn, MYSQLND_MEMORY_POOL * result_set_memory_pool, @@ -1446,6 +1474,7 @@ php_mysqlnd_read_row_ex(MYSQLND_CONN_DATA * conn, MYSQLND_MEMORY_POOL * result_s } /* }}} */ + /* {{{ php_mysqlnd_rowp_read_binary_protocol */ enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, @@ -1728,6 +1757,7 @@ php_mysqlnd_rowp_read_text_protocol_aux(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, } /* }}} */ + /* {{{ php_mysqlnd_rowp_read_text_protocol_zval */ enum_func_status php_mysqlnd_rowp_read_text_protocol_zval(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, @@ -1741,6 +1771,7 @@ php_mysqlnd_rowp_read_text_protocol_zval(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, } /* }}} */ + /* {{{ php_mysqlnd_rowp_read_text_protocol_c */ enum_func_status php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zval ** fields, @@ -1754,6 +1785,9 @@ php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_MEMORY_POOL_CHUNK * row_buffer, zv } /* }}} */ + + + /* {{{ php_mysqlnd_rowp_read */ /* if normal statements => packet->fields is created by this function, @@ -1849,6 +1883,7 @@ end: } /* }}} */ + /* {{{ php_mysqlnd_rowp_free_mem */ static void php_mysqlnd_rowp_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -1876,6 +1911,7 @@ php_mysqlnd_rowp_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) } /* }}} */ + /* {{{ php_mysqlnd_stats_read */ static enum_func_status php_mysqlnd_stats_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -1897,6 +1933,7 @@ php_mysqlnd_stats_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) } /* }}} */ + /* {{{ php_mysqlnd_stats_free_mem */ static void php_mysqlnd_stats_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -1912,6 +1949,7 @@ void php_mysqlnd_stats_free_mem(void * _packet, zend_bool stack_allocation TSRML } /* }}} */ + /* 1 + 4 (id) + 2 (field_c) + 2 (param_c) + 1 (filler) + 2 (warnings ) */ #define PREPARE_RESPONSE_SIZE_41 9 #define PREPARE_RESPONSE_SIZE_50 12 @@ -1991,6 +2029,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_prepare_free_mem */ static void php_mysqlnd_prepare_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -2002,6 +2041,7 @@ php_mysqlnd_prepare_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_D } /* }}} */ + /* {{{ php_mysqlnd_chg_user_read */ static enum_func_status php_mysqlnd_chg_user_read(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -2064,6 +2104,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_chg_user_free_mem */ static void php_mysqlnd_chg_user_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -2088,6 +2129,7 @@ php_mysqlnd_chg_user_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_ } /* }}} */ + /* {{{ php_mysqlnd_sha256_pk_request_write */ static size_t php_mysqlnd_sha256_pk_request_write(void * _packet, MYSQLND_CONN_DATA * conn TSRMLS_DC) @@ -2104,6 +2146,7 @@ size_t php_mysqlnd_sha256_pk_request_write(void * _packet, MYSQLND_CONN_DATA * c } /* }}} */ + /* {{{ php_mysqlnd_sha256_pk_request_free_mem */ static void php_mysqlnd_sha256_pk_request_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -2115,6 +2158,7 @@ void php_mysqlnd_sha256_pk_request_free_mem(void * _packet, zend_bool stack_allo } /* }}} */ + #define SHA256_PK_REQUEST_RESP_BUFFER_SIZE 2048 /* {{{ php_mysqlnd_sha256_pk_request_response_read */ @@ -2150,6 +2194,7 @@ premature_end: } /* }}} */ + /* {{{ php_mysqlnd_sha256_pk_request_response_free_mem */ static void php_mysqlnd_sha256_pk_request_response_free_mem(void * _packet, zend_bool stack_allocation TSRMLS_DC) @@ -2167,6 +2212,7 @@ php_mysqlnd_sha256_pk_request_response_free_mem(void * _packet, zend_bool stack_ } /* }}} */ + /* {{{ packet_methods */ static mysqlnd_packet_methods packet_methods[PROT_LAST] = @@ -2264,6 +2310,7 @@ mysqlnd_packet_methods packet_methods[PROT_LAST] = }; /* }}} */ + /* {{{ mysqlnd_protocol::get_greet_packet */ static struct st_mysqlnd_packet_greet * MYSQLND_METHOD(mysqlnd_protocol, get_greet_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2278,6 +2325,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_greet_packet)(MYSQLND_PROTOCOL * const prot } /* }}} */ + /* {{{ mysqlnd_protocol::get_auth_packet */ static struct st_mysqlnd_packet_auth * MYSQLND_METHOD(mysqlnd_protocol, get_auth_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2292,6 +2340,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_auth_packet)(MYSQLND_PROTOCOL * const proto } /* }}} */ + /* {{{ mysqlnd_protocol::get_auth_response_packet */ static struct st_mysqlnd_packet_auth_response * MYSQLND_METHOD(mysqlnd_protocol, get_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2306,6 +2355,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_auth_response_packet)(MYSQLND_PROTOCOL * co } /* }}} */ + /* {{{ mysqlnd_protocol::get_change_auth_response_packet */ static struct st_mysqlnd_packet_change_auth_response * MYSQLND_METHOD(mysqlnd_protocol, get_change_auth_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2320,6 +2370,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_change_auth_response_packet)(MYSQLND_PROTOC } /* }}} */ + /* {{{ mysqlnd_protocol::get_ok_packet */ static struct st_mysqlnd_packet_ok * MYSQLND_METHOD(mysqlnd_protocol, get_ok_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2334,6 +2385,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_ok_packet)(MYSQLND_PROTOCOL * const protoco } /* }}} */ + /* {{{ mysqlnd_protocol::get_eof_packet */ static struct st_mysqlnd_packet_eof * MYSQLND_METHOD(mysqlnd_protocol, get_eof_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2348,6 +2400,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_eof_packet)(MYSQLND_PROTOCOL * const protoc } /* }}} */ + /* {{{ mysqlnd_protocol::get_command_packet */ static struct st_mysqlnd_packet_command * MYSQLND_METHOD(mysqlnd_protocol, get_command_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2362,6 +2415,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_command_packet)(MYSQLND_PROTOCOL * const pr } /* }}} */ + /* {{{ mysqlnd_protocol::get_rset_packet */ static struct st_mysqlnd_packet_rset_header * MYSQLND_METHOD(mysqlnd_protocol, get_rset_header_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2376,6 +2430,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_rset_header_packet)(MYSQLND_PROTOCOL * cons } /* }}} */ + /* {{{ mysqlnd_protocol::get_result_field_packet */ static struct st_mysqlnd_packet_res_field * MYSQLND_METHOD(mysqlnd_protocol, get_result_field_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2390,6 +2445,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_result_field_packet)(MYSQLND_PROTOCOL * con } /* }}} */ + /* {{{ mysqlnd_protocol::get_row_packet */ static struct st_mysqlnd_packet_row * MYSQLND_METHOD(mysqlnd_protocol, get_row_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2404,6 +2460,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_row_packet)(MYSQLND_PROTOCOL * const protoc } /* }}} */ + /* {{{ mysqlnd_protocol::get_stats_packet */ static struct st_mysqlnd_packet_stats * MYSQLND_METHOD(mysqlnd_protocol, get_stats_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2418,6 +2475,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_stats_packet)(MYSQLND_PROTOCOL * const prot } /* }}} */ + /* {{{ mysqlnd_protocol::get_prepare_response_packet */ static struct st_mysqlnd_packet_prepare_response * MYSQLND_METHOD(mysqlnd_protocol, get_prepare_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2432,6 +2490,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_prepare_response_packet)(MYSQLND_PROTOCOL * } /* }}} */ + /* {{{ mysqlnd_protocol::get_change_user_response_packet */ static struct st_mysqlnd_packet_chg_user_resp* MYSQLND_METHOD(mysqlnd_protocol, get_change_user_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2446,6 +2505,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_change_user_response_packet)(MYSQLND_PROTOC } /* }}} */ + /* {{{ mysqlnd_protocol::get_sha256_pk_request_packet */ static struct st_mysqlnd_packet_sha256_pk_request * MYSQLND_METHOD(mysqlnd_protocol, get_sha256_pk_request_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2460,6 +2520,7 @@ MYSQLND_METHOD(mysqlnd_protocol, get_sha256_pk_request_packet)(MYSQLND_PROTOCOL } /* }}} */ + /* {{{ mysqlnd_protocol::get_sha256_pk_request_response_packet */ static struct st_mysqlnd_packet_sha256_pk_request_response * MYSQLND_METHOD(mysqlnd_protocol, get_sha256_pk_request_response_packet)(MYSQLND_PROTOCOL * const protocol, zend_bool persistent TSRMLS_DC) @@ -2474,7 +2535,9 @@ MYSQLND_METHOD(mysqlnd_protocol, get_sha256_pk_request_response_packet)(MYSQLND_ } /* }}} */ -MYSQLND_CLASS_METHODS_START(mysqlnd_protocol) + + +MYSQLND_CLASS_METHODS_START(mysqlnd_protocol) MYSQLND_METHOD(mysqlnd_protocol, get_greet_packet), MYSQLND_METHOD(mysqlnd_protocol, get_auth_packet), MYSQLND_METHOD(mysqlnd_protocol, get_auth_response_packet), @@ -2492,6 +2555,7 @@ MYSQLND_CLASS_METHODS_START(mysqlnd_protocol) MYSQLND_METHOD(mysqlnd_protocol, get_sha256_pk_request_response_packet) MYSQLND_CLASS_METHODS_END; + /* {{{ mysqlnd_protocol_init */ PHPAPI MYSQLND_PROTOCOL * mysqlnd_protocol_init(zend_bool persistent TSRMLS_DC) @@ -2503,6 +2567,7 @@ mysqlnd_protocol_init(zend_bool persistent TSRMLS_DC) } /* }}} */ + /* {{{ mysqlnd_protocol_free */ PHPAPI void mysqlnd_protocol_free(MYSQLND_PROTOCOL * const protocol TSRMLS_DC) @@ -2517,6 +2582,7 @@ mysqlnd_protocol_free(MYSQLND_PROTOCOL * const protocol TSRMLS_DC) } /* }}} */ + /* * Local variables: * tab-width: 4 |
