[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-cvs
Subject:    [PHP-CVS] =?utf-8?q?svn:_/php/php-src/_branches/PHP=5F5=5F3/ext/mysqlnd/mysqlnd=5Fps.c_trunk/ext/mys
From:       Andrey_Hristov <andrey () php ! net>
Date:       2010-05-31 18:18:37
Message-ID: svn-andrey-1275329917-300000-2090470122 () svn ! php ! net
[Download RAW message or body]

andrey                                   Mon, 31 May 2010 18:18:37 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=300000

Log:
Don't reference row_packet before checking if dereferencing is possible

Changed paths:
    U   php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_ps.c
    U   php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c

Modified: php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_ps.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_ps.c	2010-05-31 18:10:25 UTC (rev 299999)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_ps.c	2010-05-31 18:18:37 UTC (rev 300000)
@@ -308,7 +308,7 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	MYSQLND_PACKET_EOF * fields_eof;
-	enum_func_status ret;
+	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_prepare_read_eof");
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);
@@ -371,6 +371,9 @@
 		  fails, we will scrap it.
 		*/
 		s_to_prepare = stmt->conn->m->stmt_init(stmt->conn TSRMLS_CC);
+		if (!s_to_prepare) {
+			goto fail;
+		}
 		stmt_to_prepare = s_to_prepare->data;
 	}

@@ -427,7 +430,7 @@
 	DBG_RETURN(PASS);

 fail:
-	if (stmt_to_prepare != stmt) {
+	if (stmt_to_prepare != stmt && s_to_prepare) {
 		s_to_prepare->m->dtor(s_to_prepare, TRUE TSRMLS_CC);
 	}
 	stmt->state = MYSQLND_STMT_INITTED;
@@ -776,7 +779,7 @@
 	enum_func_status ret;
 	MYSQLND_STMT * s = (MYSQLND_STMT *) param;
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-	MYSQLND_PACKET_ROW *row_packet = result->row_packet;
+	MYSQLND_PACKET_ROW * row_packet;

 	DBG_ENTER("mysqlnd_stmt_fetch_row_unbuffered");

@@ -793,6 +796,10 @@
 		DBG_ERR("command out of sync");
 		DBG_RETURN(FAIL);
 	}
+	if (!(row_packet = result->row_packet)) {
+		DBG_RETURN(FAIL);
+	}
+
 	/* Let the row packet fill our buffer and skip additional malloc + memcpy */
 	row_packet->skip_extraction = stmt && stmt->result_bind? FALSE:TRUE;

@@ -943,9 +950,9 @@
 {
 	enum_func_status ret;
 	MYSQLND_STMT * s = (MYSQLND_STMT *) param;
-	MYSQLND_STMT_DATA * stmt = s? s->data : NULL;
+	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	zend_uchar buf[STMT_ID_LENGTH /* statement id */ + 4 /* number of rows to fetch */];
-	MYSQLND_PACKET_ROW *row_packet = result->row_packet;
+	MYSQLND_PACKET_ROW * row_packet;

 	DBG_ENTER("mysqlnd_fetch_stmt_row_cursor");

@@ -963,6 +970,9 @@
 		DBG_ERR("command out of sync");
 		DBG_RETURN(FAIL);
 	}
+	if (!(row_packet = result->row_packet)) {
+		DBG_RETURN(FAIL);
+	}

 	SET_EMPTY_ERROR(stmt->error_info);
 	SET_EMPTY_ERROR(stmt->conn->error_info);
@@ -1466,7 +1476,6 @@
 	DBG_ENTER("mysqlnd_stmt::bind_result");
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

-
 	if (stmt->state < MYSQLND_STMT_PREPARED) {
 		SET_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, UNKNOWN_SQLSTATE, mysqlnd_stmt_not_prepared);
 		if (result_bind) {
@@ -1673,7 +1682,6 @@
 	if (!stmt->param_count) {
 		return NULL;
 	}
-
 	return NULL;
 }
 /* }}} */

Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c	2010-05-31 18:10:25 UTC (rev 299999)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c	2010-05-31 18:18:37 UTC (rev 300000)
@@ -308,7 +308,7 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	MYSQLND_PACKET_EOF * fields_eof;
-	enum_func_status ret;
+	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_prepare_read_eof");
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);
@@ -371,6 +371,9 @@
 		  fails, we will scrap it.
 		*/
 		s_to_prepare = stmt->conn->m->stmt_init(stmt->conn TSRMLS_CC);
+		if (!s_to_prepare) {
+			goto fail;
+		}
 		stmt_to_prepare = s_to_prepare->data;
 	}

@@ -427,7 +430,7 @@
 	DBG_RETURN(PASS);

 fail:
-	if (stmt_to_prepare != stmt) {
+	if (stmt_to_prepare != stmt && s_to_prepare) {
 		s_to_prepare->m->dtor(s_to_prepare, TRUE TSRMLS_CC);
 	}
 	stmt->state = MYSQLND_STMT_INITTED;
@@ -776,7 +779,7 @@
 	enum_func_status ret;
 	MYSQLND_STMT * s = (MYSQLND_STMT *) param;
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
-	MYSQLND_PACKET_ROW *row_packet = result->row_packet;
+	MYSQLND_PACKET_ROW * row_packet;

 	DBG_ENTER("mysqlnd_stmt_fetch_row_unbuffered");

@@ -793,6 +796,10 @@
 		DBG_ERR("command out of sync");
 		DBG_RETURN(FAIL);
 	}
+	if (!(row_packet = result->row_packet)) {
+		DBG_RETURN(FAIL);
+	}
+
 	/* Let the row packet fill our buffer and skip additional malloc + memcpy */
 	row_packet->skip_extraction = stmt && stmt->result_bind? FALSE:TRUE;

@@ -943,9 +950,9 @@
 {
 	enum_func_status ret;
 	MYSQLND_STMT * s = (MYSQLND_STMT *) param;
-	MYSQLND_STMT_DATA * stmt = s? s->data : NULL;
+	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	zend_uchar buf[STMT_ID_LENGTH /* statement id */ + 4 /* number of rows to fetch */];
-	MYSQLND_PACKET_ROW *row_packet = result->row_packet;
+	MYSQLND_PACKET_ROW * row_packet;

 	DBG_ENTER("mysqlnd_fetch_stmt_row_cursor");

@@ -963,6 +970,9 @@
 		DBG_ERR("command out of sync");
 		DBG_RETURN(FAIL);
 	}
+	if (!(row_packet = result->row_packet)) {
+		DBG_RETURN(FAIL);
+	}

 	SET_EMPTY_ERROR(stmt->error_info);
 	SET_EMPTY_ERROR(stmt->conn->error_info);
@@ -1466,7 +1476,6 @@
 	DBG_ENTER("mysqlnd_stmt::bind_result");
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

-
 	if (stmt->state < MYSQLND_STMT_PREPARED) {
 		SET_STMT_ERROR(stmt, CR_NO_PREPARE_STMT, UNKNOWN_SQLSTATE, mysqlnd_stmt_not_prepared);
 		if (result_bind) {
@@ -1673,7 +1682,6 @@
 	if (!stmt->param_count) {
 		return NULL;
 	}
-
 	return NULL;
 }
 /* }}} */



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic