List:Commits« Previous MessageNext Message »
From:ahristov Date:June 28 2007 2:37pm
Subject:PHP mysqlnd svn commit: r566 - in trunk: php4/ext/mysql php5/ext/mysql php5/ext/mysqli php6/ext/mysql php6/ext/mysqli
View as plain text  
Author: ahristov
Date: 2007-06-28 14:37:50 +0200 (Thu, 28 Jun 2007)
New Revision: 566

Modified:
   trunk/php4/ext/mysql/mysql_mysqlnd.h
   trunk/php4/ext/mysql/php_mysql.c
   trunk/php5/ext/mysql/mysql_mysqlnd.h
   trunk/php5/ext/mysql/php_mysql.c
   trunk/php5/ext/mysqli/mysqli_mysqlnd.h
   trunk/php6/ext/mysql/mysql_mysqlnd.h
   trunk/php6/ext/mysql/php_mysql.c
   trunk/php6/ext/mysql/tests
   trunk/php6/ext/mysqli/mysqli_mysqlnd.h
Log:
Fix crashes when there is unbuffered query left


Modified: trunk/php4/ext/mysql/mysql_mysqlnd.h
===================================================================
--- trunk/php4/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php4/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:37:50 UTC (rev 566)
@@ -110,13 +110,14 @@
 #define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
 #define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
 #define mysql_warning_count(r)			mysqlnd_warning_count((r))
+#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) ||
(r)->data)
 
 /* Here comes non-libmysql API to have less ifdefs in mysqli*/
 #define MYSQLI_CLOSE_EXPLICIT			MYSQLND_CLOSE_EXPLICIT
 #define MYSQLI_CLOSE_IMPLICIT			MYSQLND_CLOSE_IMPLICIT
 #define MYSQLI_CLOSE_DISCONNECTED		MYSQLND_CLOSE_DISCONNECTED
 
-#define mysqli_result_is_unbuffered(r)	((r)->conn)
+#define mysqli_result_is_unbuffered(r)	((r)->unbuf)
 #define mysqli_server_status(c)			(c)->upsert_status.server_status
 #define mysqli_stmt_warning_count(s)	mysqlnd_stmt_warning_count((s))
 #define mysqli_stmt_server_status(s)	(s)->upsert_status.server_status

Modified: trunk/php4/ext/mysql/php_mysql.c
===================================================================
--- trunk/php4/ext/mysql/php_mysql.c	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php4/ext/mysql/php_mysql.c	2007-06-28 12:37:50 UTC (rev 566)
@@ -247,14 +247,12 @@
 	if (mysql->active_result_id) { \
 		do {					\
 			int type;			\
-			MYSQL_RES *result;	\
+			MYSQL_RES *mysql_result;	\
 							\
-			result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
-			MYSQLND_RES_UNBUFFERED *unbuf = result->unbuf; \
-			if (unbuf) { \
-				if (unbuf->last_row_data) {						\
+			mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
+			if (mysql_result && type==le_result) {						\
+				if (mysqli_result_is_unbuffered(mysql_result) && !mysql_eof(mysql_result)) {
\
 					php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Function called without first fetching
all rows from a previous unbuffered query");	\
-					mysql_free_result(result);	\
 				}						\
 				zend_list_delete(mysql->active_result_id);	\
 				mysql->active_result_id = 0;			\

Modified: trunk/php5/ext/mysql/mysql_mysqlnd.h
===================================================================
--- trunk/php5/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php5/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:37:50 UTC (rev 566)
@@ -110,13 +110,14 @@
 #define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
 #define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
 #define mysql_warning_count(r)			mysqlnd_warning_count((r))
+#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) ||
(r)->data)
 
 /* Here comes non-libmysql API to have less ifdefs in mysqli*/
 #define MYSQLI_CLOSE_EXPLICIT			MYSQLND_CLOSE_EXPLICIT
 #define MYSQLI_CLOSE_IMPLICIT			MYSQLND_CLOSE_IMPLICIT
 #define MYSQLI_CLOSE_DISCONNECTED		MYSQLND_CLOSE_DISCONNECTED
 
-#define mysqli_result_is_unbuffered(r)	((r)->conn)
+#define mysqli_result_is_unbuffered(r)	((r)->unbuf)
 #define mysqli_server_status(c)			(c)->upsert_status.server_status
 #define mysqli_stmt_warning_count(s)	mysqlnd_stmt_warning_count((s))
 #define mysqli_stmt_server_status(s)	(s)->upsert_status.server_status

Modified: trunk/php5/ext/mysql/php_mysql.c
===================================================================
--- trunk/php5/ext/mysql/php_mysql.c	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php5/ext/mysql/php_mysql.c	2007-06-28 12:37:50 UTC (rev 566)
@@ -256,14 +256,12 @@
 	if (mysql->active_result_id) { \
 		do {					\
 			int type;			\
-			MYSQL_RES *result;	\
+			MYSQL_RES *mysql_result;	\
 							\
-			result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
-			MYSQLND_RES_UNBUFFERED *unbuf = result->unbuf; \
-			if (unbuf) { \
-				if (unbuf->last_row_data) {						\
+			mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
+			if (mysql_result && type==le_result) {						\
+				if (mysqli_result_is_unbuffered(mysql_result) && !mysql_eof(mysql_result)) {
\
 					php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Function called without first fetching
all rows from a previous unbuffered query");	\
-					mysql_free_result(result);	\
 				}						\
 				zend_list_delete(mysql->active_result_id);	\
 				mysql->active_result_id = 0;			\

Modified: trunk/php5/ext/mysqli/mysqli_mysqlnd.h
===================================================================
--- trunk/php5/ext/mysqli/mysqli_mysqlnd.h	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php5/ext/mysqli/mysqli_mysqlnd.h	2007-06-28 12:37:50 UTC (rev 566)
@@ -110,6 +110,7 @@
 #define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
 #define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
 #define mysql_warning_count(r)			mysqlnd_warning_count((r))
+#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) ||
(r)->data)
 
 /* Here comes non-libmysql API to have less ifdefs in mysqli*/
 #define MYSQLI_CLOSE_EXPLICIT			MYSQLND_CLOSE_EXPLICIT

Modified: trunk/php6/ext/mysql/mysql_mysqlnd.h
===================================================================
--- trunk/php6/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php6/ext/mysql/mysql_mysqlnd.h	2007-06-28 12:37:50 UTC (rev 566)
@@ -110,13 +110,14 @@
 #define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
 #define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
 #define mysql_warning_count(r)			mysqlnd_warning_count((r))
+#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) ||
(r)->data)
 
 /* Here comes non-libmysql API to have less ifdefs in mysqli*/
 #define MYSQLI_CLOSE_EXPLICIT			MYSQLND_CLOSE_EXPLICIT
 #define MYSQLI_CLOSE_IMPLICIT			MYSQLND_CLOSE_IMPLICIT
 #define MYSQLI_CLOSE_DISCONNECTED		MYSQLND_CLOSE_DISCONNECTED
 
-#define mysqli_result_is_unbuffered(r)	((r)->conn)
+#define mysqli_result_is_unbuffered(r)	((r)->unbuf)
 #define mysqli_server_status(c)			(c)->upsert_status.server_status
 #define mysqli_stmt_warning_count(s)	mysqlnd_stmt_warning_count((s))
 #define mysqli_stmt_server_status(s)	(s)->upsert_status.server_status

Modified: trunk/php6/ext/mysql/php_mysql.c
===================================================================
--- trunk/php6/ext/mysql/php_mysql.c	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php6/ext/mysql/php_mysql.c	2007-06-28 12:37:50 UTC (rev 566)
@@ -252,14 +252,12 @@
 	if (mysql->active_result_id) { \
 		do {					\
 			int type;			\
-			MYSQL_RES *result;	\
+			MYSQL_RES *mysql_result;	\
 							\
-			result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
-			MYSQLND_RES_UNBUFFERED *unbuf = result->unbuf; \
-			if (unbuf) { \
-				if (unbuf->last_row_data) {						\
+			mysql_result = (MYSQL_RES *) zend_list_find(mysql->active_result_id, &type);	\
+			if (mysql_result && type==le_result) {						\
+				if (mysqli_result_is_unbuffered(mysql_result) && !mysql_eof(mysql_result)) {
\
 					php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Function called without first fetching
all rows from a previous unbuffered query");	\
-					mysql_free_result(result);	\
 				}						\
 				zend_list_delete(mysql->active_result_id);	\
 				mysql->active_result_id = 0;			\

Modified: trunk/php6/ext/mysql/tests
===================================================================
--- trunk/php6/ext/mysql/tests	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php6/ext/mysql/tests	2007-06-28 12:37:50 UTC (rev 566)
@@ -1 +1 @@
-link ../../../tests
\ No newline at end of file
+link ../../../tests/ext/mysql
\ No newline at end of file

Modified: trunk/php6/ext/mysqli/mysqli_mysqlnd.h
===================================================================
--- trunk/php6/ext/mysqli/mysqli_mysqlnd.h	2007-06-28 12:32:53 UTC (rev 565)
+++ trunk/php6/ext/mysqli/mysqli_mysqlnd.h	2007-06-28 12:37:50 UTC (rev 566)
@@ -107,7 +107,7 @@
 #define mysql_get_server_info(r)		mysqlnd_get_server_info((r))
 #define mysql_get_server_version(r)		mysqlnd_get_server_version((r))
 #define mysql_warning_count(r)			mysqlnd_warning_count((r))
-
+#define mysql_eof(r)					(((r)->unbuf && (r)->unbuf->eof_reached) ||
(r)->data)
 /* Here comes non-libmysql API to have less ifdefs in mysqli*/
 #define MYSQLI_CLOSE_EXPLICIT			MYSQLND_CLOSE_EXPLICIT
 #define MYSQLI_CLOSE_IMPLICIT			MYSQLND_CLOSE_IMPLICIT

Thread
PHP mysqlnd svn commit: r566 - in trunk: php4/ext/mysql php5/ext/mysql php5/ext/mysqli php6/ext/mysql php6/ext/mysqliahristov28 Jun