andrey Fri Jun 12 13:24:37 2009 UTC Modified files: /php-src/ext/mysqlnd mysqlnd_enum_n_def.h mysqlnd_statistics.c mysqlnd_statistics.h mysqlnd_wireprotocol.c Log: Fix crash when tracing is enabled. Position after buffer was used also direct usage of MYSQLND_STRING pointer instead of the "s" property of the structure.
http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_enum_n_def.h?r1=1.13&r2=1.14&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_enum_n_def.h diff -u php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.13 php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.14 --- php-src/ext/mysqlnd/mysqlnd_enum_n_def.h:1.13 Thu Jan 22 20:57:31 2009 +++ php-src/ext/mysqlnd/mysqlnd_enum_n_def.h Fri Jun 12 13:24:37 2009 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_enum_n_def.h,v 1.13 2009/01/22 20:57:31 johannes Exp $ */ +/* $Id: mysqlnd_enum_n_def.h,v 1.14 2009/06/12 13:24:37 andrey Exp $ */ #ifndef MYSQLND_ENUM_N_DEF_H #define MYSQLND_ENUM_N_DEF_H @@ -142,7 +142,6 @@ MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203, } enum_mysqlnd_option; - typedef enum mysqlnd_field_types { MYSQL_TYPE_DECIMAL, @@ -177,7 +176,6 @@ /* Please update this if there is a new type after MYSQL_TYPE_GEOMETRY */ #define MYSQL_TYPE_LAST MYSQL_TYPE_GEOMETRY - typedef enum mysqlnd_server_option { MYSQL_OPTION_MULTI_STATEMENTS_ON, @@ -241,7 +239,6 @@ /* see mysqlnd_charset.c for more information */ #define MYSQLND_BINARY_CHARSET_NR 63 - /* /-----> CONN_CLOSE <---------------\ | ^ \ @@ -261,7 +258,6 @@ CONN_QUIT_SENT, /* object is "destroyed" at this stage */ } enum_mysqlnd_connection_state; - typedef enum mysqlnd_stmt_state { MYSQLND_STMT_INITTED = 0, @@ -272,13 +268,11 @@ MYSQLND_STMT_USER_FETCHING, /* fetch_row_buff or fetch_row_unbuf */ } enum_mysqlnd_stmt_state; - typedef enum param_bind_flags { MYSQLND_PARAM_BIND_BLOB_USED = 1 } enum_param_bind_flags; - /* PS */ enum mysqlnd_stmt_attr { @@ -286,7 +280,6 @@ STMT_ATTR_CURSOR_TYPE, STMT_ATTR_PREFETCH_ROWS }; - enum myslqnd_cursor_type { CURSOR_TYPE_NO_CURSOR= 0, @@ -294,7 +287,6 @@ CURSOR_TYPE_FOR_UPDATE= 2, CURSOR_TYPE_SCROLLABLE= 4 }; - typedef enum mysqlnd_connection_close_type { MYSQLND_CLOSE_EXPLICIT = 0, @@ -303,7 +295,6 @@ MYSQLND_CLOSE_LAST /* for checking, should always be last */ } enum_connection_close_type; - typedef enum mysqlnd_collected_stats { STAT_BYTES_SENT, http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_statistics.c?r1=1.12&r2=1.13&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_statistics.c diff -u php-src/ext/mysqlnd/mysqlnd_statistics.c:1.12 php-src/ext/mysqlnd/mysqlnd_statistics.c:1.13 --- php-src/ext/mysqlnd/mysqlnd_statistics.c:1.12 Mon Mar 30 19:43:47 2009 +++ php-src/ext/mysqlnd/mysqlnd_statistics.c Fri Jun 12 13:24:37 2009 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_statistics.c,v 1.12 2009/03/30 19:43:47 felipe Exp $ */ +/* $Id: mysqlnd_statistics.c,v 1.13 2009/06/12 13:24:37 andrey Exp $ */ #include "php.h" #include "mysqlnd.h" #include "mysqlnd_priv.h" @@ -168,7 +168,7 @@ UChar *ustr, *tstr; int ulen, tlen; #endif - char tmp[22]; + char tmp[25]; sprintf((char *)&tmp, MYSQLND_LLU_SPEC, stats->values[i]); #if PHP_MAJOR_VERSION >= 6 http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_statistics.h?r1=1.13&r2=1.14&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_statistics.h diff -u php-src/ext/mysqlnd/mysqlnd_statistics.h:1.13 php-src/ext/mysqlnd/mysqlnd_statistics.h:1.14 --- php-src/ext/mysqlnd/mysqlnd_statistics.h:1.13 Fri May 29 08:05:21 2009 +++ php-src/ext/mysqlnd/mysqlnd_statistics.h Fri Jun 12 13:24:37 2009 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: mysqlnd_statistics.h,v 1.13 2009/05/29 08:05:21 andrey Exp $ */ +/* $Id: mysqlnd_statistics.h,v 1.14 2009/06/12 13:24:37 andrey Exp $ */ #ifndef MYSQLND_STATISTICS_H #define MYSQLND_STATISTICS_H @@ -39,7 +39,8 @@ #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[(statistic)].s); \ + \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ mysqlnd_global_stats->values[(statistic)]++; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ @@ -49,7 +50,8 @@ #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global&conn stat decrease [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&conn stat decrease [%s]", mysqlnd_stats_values_names[(statistic)].s); \ + \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ mysqlnd_global_stats->values[(statistic)]--; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ @@ -64,11 +66,15 @@ if (MYSQLND_G(collect_statistics)) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ - DBG_INF_FMT("Global stat increase [%s] [%s]", mysqlnd_stats_values_names[(statistic1)], mysqlnd_stats_values_names[(statistic2)]); \ + enum_mysqlnd_collected_stats _s1 = (statistic1);\ + enum_mysqlnd_collected_stats _s2 = (statistic2);\ + \ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ }\ } @@ -76,7 +82,8 @@ #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[(statistic)].s); \ + \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ mysqlnd_global_stats->values[(statistic)]++; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ @@ -90,7 +97,8 @@ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ uint64_t v = (uint64_t) (value); \ - DBG_INF_FMT("Global&Conn stat increase w value [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&Conn stat increase w value [%s]", mysqlnd_stats_values_names[(statistic)].s); \ + \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ mysqlnd_global_stats->values[(statistic)] += v; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ @@ -105,14 +113,19 @@ if (MYSQLND_G(collect_statistics)) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ + enum_mysqlnd_collected_stats _s1 = (statistic1);\ + enum_mysqlnd_collected_stats _s2 = (statistic2);\ \ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ + \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ if ((conn_stats)) { \ - if (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s2]+= v2; \ } \ } \ } @@ -124,16 +137,23 @@ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ uint64_t v3 = (uint64_t) (value3); \ + enum_mysqlnd_collected_stats _s1 = (statistic1); \ + enum_mysqlnd_collected_stats _s2 = (statistic2); \ + enum_mysqlnd_collected_stats _s3 = (statistic3); \ + \ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ + if (_s3 != STAT_LAST) DBG_INF_FMT("Global stat increase3 [%s]", mysqlnd_stats_values_names[_s3].s); \ \ tsrm_mutex_lock(mysqlnd_global_stats->LOCK_access); \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ - if (statistic3 != STAT_LAST) mysqlnd_global_stats->values[(statistic3)]+= v3; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ + if (_s3 != STAT_LAST) mysqlnd_global_stats->values[_s3]+= v3; \ tsrm_mutex_unlock(mysqlnd_global_stats->LOCK_access); \ if ((conn_stats)) { \ - if (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \ - if (statistic3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic3)]+= v3; \ + if (_s1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s2]+= v2; \ + if (_s3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s3]+= v3; \ } \ } \ } @@ -144,7 +164,7 @@ #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global stat increase [%s]", mysqlnd_stats_values_names[(statistic)].s); \ mysqlnd_global_stats->values[(statistic)]++; \ } \ } @@ -153,7 +173,7 @@ #define MYSQLND_DEC_CONN_STATISTIC(conn_stats, statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global&Conn stat decrease [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&Conn stat decrease [%s]", mysqlnd_stats_values_names[(statistic)].s); \ mysqlnd_global_stats->values[(statistic)]--; \ if ((conn_stats)) { \ ((MYSQLND_STATS *) conn_stats)->values[(statistic)]--; \ @@ -166,17 +186,21 @@ if (MYSQLND_G(collect_statistics)) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ - DBG_INF_FMT("Global stat increase [%s] [%s]", mysqlnd_stats_values_names[(statistic1)], mysqlnd_stats_values_names[(statistic2)]); \ + enum_mysqlnd_collected_stats _s1 = (statistic1);\ + enum_mysqlnd_collected_stats _s2 = (statistic2);\ + \ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ }\ } #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ - DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&Conn stat increase [%s]", mysqlnd_stats_values_names[(statistic)].s); \ mysqlnd_global_stats->values[(statistic)]++; \ if ((conn_stats)) { \ ((MYSQLND_STATS *) conn_stats)->values[(statistic)]++; \ @@ -188,7 +212,7 @@ { \ if (MYSQLND_G(collect_statistics) && (statistic) != STAT_LAST) { \ uint64_t v = (uint64_t) (value); \ - DBG_INF_FMT("Global&Conn stats increase w value [%s]", mysqlnd_stats_values_names[(statistic)]); \ + DBG_INF_FMT("Global&Conn stats increase w value [%s]", mysqlnd_stats_values_names[(statistic)].s); \ mysqlnd_global_stats->values[(statistic)] += v; \ if ((conn_stats)) { \ ((MYSQLND_STATS *) conn_stats)->values[(statistic)] += v; \ @@ -201,12 +225,16 @@ if (MYSQLND_G(collect_statistics)) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ + enum_mysqlnd_collected_stats _s1 = (statistic1);\ + enum_mysqlnd_collected_stats _s2 = (statistic2);\ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ if ((conn_stats)) { \ - if (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \ + if (_s1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s2]+= v2; \ } \ } \ } @@ -217,14 +245,21 @@ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ uint64_t v3 = (uint64_t) (value3); \ + enum_mysqlnd_collected_stats _s1 = (statistic1); \ + enum_mysqlnd_collected_stats _s2 = (statistic2); \ + enum_mysqlnd_collected_stats _s3 = (statistic3); \ + \ + if (_s1 != STAT_LAST) DBG_INF_FMT("Global stat increase1 [%s]", mysqlnd_stats_values_names[_s1].s); \ + if (_s2 != STAT_LAST) DBG_INF_FMT("Global stat increase2 [%s]", mysqlnd_stats_values_names[_s2].s); \ + if (_s3 != STAT_LAST) DBG_INF_FMT("Global stat increase3 [%s]", mysqlnd_stats_values_names[_s3].s); \ \ - if (statistic1 != STAT_LAST) mysqlnd_global_stats->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) mysqlnd_global_stats->values[(statistic2)]+= v2; \ - if (statistic3 != STAT_LAST) mysqlnd_global_stats->values[(statistic3)]+= v3; \ - if ((conn_stats)) { \ - if (statistic1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic1)]+= v1; \ - if (statistic2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic2)]+= v2; \ - if (statistic3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[(statistic3)]+= v3; \ + if (_s1 != STAT_LAST) mysqlnd_global_stats->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) mysqlnd_global_stats->values[_s2]+= v2; \ + if (_s3 != STAT_LAST) mysqlnd_global_stats->values[_s3]+= v3; \ + if ((conn_stats)) { \ + if (_s1 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s1]+= v1; \ + if (_s2 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s2]+= v2; \ + if (_s3 != STAT_LAST) ((MYSQLND_STATS *) conn_stats)->values[_s3]+= v3; \ } \ } \ } http://cvs.php.net/viewvc.cgi/php-src/ext/mysqlnd/mysqlnd_wireprotocol.c?r1=1.31&r2=1.32&diff_format=u Index: php-src/ext/mysqlnd/mysqlnd_wireprotocol.c diff -u php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.31 php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.32 --- php-src/ext/mysqlnd/mysqlnd_wireprotocol.c:1.31 Thu Jun 11 17:53:13 2009 +++ php-src/ext/mysqlnd/mysqlnd_wireprotocol.c Fri Jun 12 13:24:37 2009 @@ -42,7 +42,6 @@ #define MYSQLND_DUMP_HEADER_N_BODY2 #define MYSQLND_DUMP_HEADER_N_BODY_FULL2 - #define PACKET_READ_HEADER_AND_BODY(packet, conn, buf, buf_size, packet_type_as_text, packet_type) \ { \ if (FAIL == mysqlnd_read_header((conn), &((packet)->header) TSRMLS_CC)) {\ @@ -70,7 +69,6 @@ 1); \ } - extern mysqlnd_packet_methods packet_methods[]; static const char *unknown_sqlstate= "HY000"; @@ -811,7 +809,7 @@ p+= 2; /* There is a message */ - if (packet->header.size > (size_t)(p - buf) && (i = php_mysqlnd_net_field_length(&p))) { + if (packet->header.size > (size_t) (p - buf) && (i = php_mysqlnd_net_field_length(&p))) { packet->message = pestrndup((char *)p, MIN(i, sizeof(buf) - (p - buf)), conn->persistent); packet->message_len = i; } else { @@ -1045,7 +1043,7 @@ packet->warning_count = uint2korr(p); p+=2; /* Check for additional textual data */ - if (packet->header.size > (size_t)(p - buf) && (len = php_mysqlnd_net_field_length(&p))) { + if (packet->header.size > (size_t) (p - buf) && (len = php_mysqlnd_net_field_length(&p))) { packet->info_or_local_file = mnd_pemalloc(len + 1, conn->persistent); memcpy(packet->info_or_local_file, p, len); packet->info_or_local_file[len] = '\0'; @@ -1946,7 +1944,7 @@ DBG_INF_FMT("Prepare packet read: stmt_id=%d fields=%d params=%d", packet->stmt_id, packet->field_count, packet->param_count); - if ((size_t)(p - begin) > packet->header.size) { + if ((size_t) (p - begin) > packet->header.size) { DBG_ERR_FMT("PREPARE packet %d bytes shorter than expected", p - begin - packet->header.size); php_error_docref(NULL TSRMLS_CC, E_WARNING, "PREPARE packet "MYSQLND_SZ_T_SPEC" bytes shorter than expected", p - begin - packet->header.size);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php