andrey                                   Tue, 01 Jun 2010 14:16:27 +0000

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

Log:
defensive programming, check before using a resource

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

Modified: php/php-src/branches/PHP_5_3/ext/mysqli/mysqli_api.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/mysqli/mysqli_api.c	2010-06-01 13:51:05 UTC (rev 300050)
+++ php/php-src/branches/PHP_5_3/ext/mysqli/mysqli_api.c	2010-06-01 14:16:27 UTC (rev 300051)
@@ -167,6 +167,9 @@
 		return PASS;
 	}
 	params = mysqlnd_stmt_alloc_param_bind(stmt->stmt);
+	if (!params) {
+		goto end;
+	}
 	for (i = 0; i < (argc - start); i++) {
 		zend_uchar type;
 		switch (types[i]) {

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-06-01 13:51:05 UTC (rev 300050)
+++ php/php-src/branches/PHP_5_3/ext/mysqlnd/mysqlnd_ps.c	2010-06-01 14:16:27 UTC (rev 300051)
@@ -69,6 +69,9 @@
 	zend_bool to_cache = FALSE;

 	DBG_ENTER("mysqlnd_stmt::store_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -134,6 +137,9 @@
 	MYSQLND_RES *result;

 	DBG_ENTER("mysqlnd_stmt::get_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -215,14 +221,13 @@
 	MYSQLND * conn;

 	DBG_ENTER("mysqlnd_stmt::next_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

-	if (!conn ||
-		CONN_GET_STATE(conn) != CONN_NEXT_RESULT_PENDING ||
-		!(conn->upsert_status.server_status & SERVER_MORE_RESULTS_EXISTS) ||
-		!stmt->result)
-	{
+	if (CONN_GET_STATE(conn) != CONN_NEXT_RESULT_PENDING || !(conn->upsert_status.server_status & SERVER_MORE_RESULTS_EXISTS)) {
 		DBG_RETURN(FAIL);
 	}

@@ -245,6 +250,9 @@
 	MYSQLND_PACKET_RES_FIELD * field_packet;

 	DBG_ENTER("mysqlnd_stmt_skip_metadata");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	field_packet = stmt->conn->protocol->m.get_result_field_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -277,6 +285,9 @@
 	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_read_prepare_response");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	prepare_resp = stmt->conn->protocol->m.get_prepare_response_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -316,6 +327,9 @@
 	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_prepare_read_eof");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	fields_eof = stmt->conn->protocol->m.get_eof_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -352,6 +366,9 @@
 	MYSQLND_STMT_DATA * stmt_to_prepare = stmt;

 	DBG_ENTER("mysqlnd_stmt::prepare");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	SET_ERROR_AFF_ROWS(stmt);
@@ -368,7 +385,7 @@
 			stmt->default_rset_handler(s TSRMLS_CC);
 		}
 		/* No 'else' here please :) */
-		if (stmt->state > MYSQLND_STMT_WAITING_USE_OR_STORE) {
+		if (stmt->state > MYSQLND_STMT_WAITING_USE_OR_STORE && stmt->result) {
 			stmt->result->m.skip_result(stmt->result TSRMLS_CC);
 		}
 		/*
@@ -455,6 +472,9 @@
 	MYSQLND	* conn;

 	DBG_ENTER("mysqlnd_stmt_execute_parse_response");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	CONN_SET_STATE(conn, CONN_QUERY_SENT);

@@ -548,6 +568,9 @@
 	zend_bool	free_request;

 	DBG_ENTER("mysqlnd_stmt::execute");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

@@ -918,6 +941,9 @@
 	MYSQLND * conn;

 	DBG_ENTER("mysqlnd_stmt::use_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -964,7 +990,7 @@

 	DBG_ENTER("mysqlnd_fetch_stmt_row_cursor");

-	if (!stmt) {
+	if (!stmt || !stmt->conn || !result || !result->conn || !result->unbuf) {
 		DBG_ERR("no statement");
 		DBG_RETURN(FAIL);
 	}
@@ -1108,6 +1134,9 @@
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	enum_func_status ret;
 	DBG_ENTER("mysqlnd_stmt::fetch");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	if (!stmt->result ||
@@ -1161,6 +1190,9 @@
 	zend_uchar cmd_buf[STMT_ID_LENGTH /* statement id */];

 	DBG_ENTER("mysqlnd_stmt::reset");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	SET_EMPTY_ERROR(stmt->error_info);
@@ -1232,6 +1264,9 @@
 	enum php_mysqlnd_server_command cmd = COM_STMT_SEND_LONG_DATA;

 	DBG_ENTER("mysqlnd_stmt::send_long_data");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_no=%d data_len=%lu", stmt->stmt_id, param_no, length);

 	conn = stmt->conn;
@@ -1337,6 +1372,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_param");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_count=%u", stmt->stmt_id, stmt->param_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1406,6 +1444,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_one_parameter");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_no=%d param_count=%u type=%d",
 				stmt->stmt_id, param_no, stmt->param_count, type);

@@ -1426,6 +1467,9 @@
 	if (stmt->param_count) {
 		if (!stmt->param_bind) {
 			stmt->param_bind = mnd_ecalloc(stmt->param_count, sizeof(MYSQLND_PARAM_BIND));
+			if (!stmt->param_bind) {
+				DBG_RETURN(FAIL);
+			}
 		}

 		/* Prevent from freeing */
@@ -1457,6 +1501,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::refresh_bind_param");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_count=%u", stmt->stmt_id, stmt->param_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1484,6 +1531,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1535,6 +1585,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1560,6 +1613,9 @@
 		} else {
 			stmt->result_bind = mnd_erealloc(stmt->result_bind, stmt->field_count * sizeof(MYSQLND_RESULT_BIND));
 		}
+		if (!stmt->result_bind) {
+			DBG_RETURN(FAIL);
+		}
 		ALLOC_INIT_ZVAL(stmt->result_bind[param_no].zv);
 		/*
 		  Don't update is_ref !!! it's not our job
@@ -1705,6 +1761,9 @@
 	MYSQLND_RES *result;

 	DBG_ENTER("mysqlnd_stmt::result_metadata");
+	if (!stmt) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%u field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (!stmt->field_count || !stmt->conn || !stmt->result || !stmt->result->meta) {
@@ -1764,6 +1823,9 @@
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	unsigned long val = *(unsigned long *) value;
 	DBG_ENTER("mysqlnd_stmt::attr_set");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu attr_type=%u value=%lu", stmt->stmt_id, attr_type, val);

 	switch (attr_type) {
@@ -1812,6 +1874,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::attr_set");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu attr_type=%u", stmt->stmt_id, attr_type);

 	switch (attr_type) {
@@ -1839,6 +1904,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::free_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	if (!stmt->result) {
@@ -1892,6 +1960,9 @@
 	unsigned int i;

 	DBG_ENTER("mysqlnd_stmt_separate_result_bind");
+	if (!stmt) {
+		DBG_VOID_RETURN;
+	}
 	DBG_INF_FMT("stmt=%lu result_bind=%p field_count=%u",
 				stmt->stmt_id, stmt->result_bind, stmt->field_count);

@@ -1944,6 +2015,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt_separate_one_result_bind");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu result_bind=%p field_count=%u param_no=%d",
 				stmt->stmt_id, stmt->result_bind, stmt->field_count, param_no);

@@ -1992,6 +2066,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_internal_free_stmt_content");
+	if (!stmt) {
+		DBG_VOID_RETURN;
+	}
 	DBG_INF_FMT("stmt=%lu param_bind=%p param_count=%u",
 				stmt->stmt_id, stmt->param_bind, stmt->param_count);

@@ -2042,6 +2119,9 @@
 	enum_mysqlnd_collected_stats stat = STAT_LAST;

 	DBG_ENTER("mysqlnd_stmt::net_close");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;

Modified: php/php-src/trunk/ext/mysqli/mysqli_api.c
===================================================================
--- php/php-src/trunk/ext/mysqli/mysqli_api.c	2010-06-01 13:51:05 UTC (rev 300050)
+++ php/php-src/trunk/ext/mysqli/mysqli_api.c	2010-06-01 14:16:27 UTC (rev 300051)
@@ -167,6 +167,9 @@
 		return PASS;
 	}
 	params = mysqlnd_stmt_alloc_param_bind(stmt->stmt);
+	if (!params) {
+		goto end;
+	}
 	for (i = 0; i < (argc - start); i++) {
 		zend_uchar type;
 		switch (types[i]) {

Modified: php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c
===================================================================
--- php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c	2010-06-01 13:51:05 UTC (rev 300050)
+++ php/php-src/trunk/ext/mysqlnd/mysqlnd_ps.c	2010-06-01 14:16:27 UTC (rev 300051)
@@ -69,6 +69,9 @@
 	zend_bool to_cache = FALSE;

 	DBG_ENTER("mysqlnd_stmt::store_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -134,6 +137,9 @@
 	MYSQLND_RES *result;

 	DBG_ENTER("mysqlnd_stmt::get_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -215,14 +221,13 @@
 	MYSQLND * conn;

 	DBG_ENTER("mysqlnd_stmt::next_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

-	if (!conn ||
-		CONN_GET_STATE(conn) != CONN_NEXT_RESULT_PENDING ||
-		!(conn->upsert_status.server_status & SERVER_MORE_RESULTS_EXISTS) ||
-		!stmt->result)
-	{
+	if (CONN_GET_STATE(conn) != CONN_NEXT_RESULT_PENDING || !(conn->upsert_status.server_status & SERVER_MORE_RESULTS_EXISTS)) {
 		DBG_RETURN(FAIL);
 	}

@@ -245,6 +250,9 @@
 	MYSQLND_PACKET_RES_FIELD * field_packet;

 	DBG_ENTER("mysqlnd_stmt_skip_metadata");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	field_packet = stmt->conn->protocol->m.get_result_field_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -277,6 +285,9 @@
 	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_read_prepare_response");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	prepare_resp = stmt->conn->protocol->m.get_prepare_response_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -316,6 +327,9 @@
 	enum_func_status ret = FAIL;

 	DBG_ENTER("mysqlnd_stmt_prepare_read_eof");
+	if (!stmt || !stmt->conn || !stmt->conn->protocol) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	fields_eof = stmt->conn->protocol->m.get_eof_packet(stmt->conn->protocol, FALSE TSRMLS_CC);
@@ -352,6 +366,9 @@
 	MYSQLND_STMT_DATA * stmt_to_prepare = stmt;

 	DBG_ENTER("mysqlnd_stmt::prepare");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	SET_ERROR_AFF_ROWS(stmt);
@@ -368,7 +385,7 @@
 			stmt->default_rset_handler(s TSRMLS_CC);
 		}
 		/* No 'else' here please :) */
-		if (stmt->state > MYSQLND_STMT_WAITING_USE_OR_STORE) {
+		if (stmt->state > MYSQLND_STMT_WAITING_USE_OR_STORE && stmt->result) {
 			stmt->result->m.skip_result(stmt->result TSRMLS_CC);
 		}
 		/*
@@ -455,6 +472,9 @@
 	MYSQLND	* conn;

 	DBG_ENTER("mysqlnd_stmt_execute_parse_response");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	CONN_SET_STATE(conn, CONN_QUERY_SENT);

@@ -548,6 +568,9 @@
 	zend_bool	free_request;

 	DBG_ENTER("mysqlnd_stmt::execute");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	conn = stmt->conn;
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

@@ -918,6 +941,9 @@
 	MYSQLND * conn;

 	DBG_ENTER("mysqlnd_stmt::use_result");
+	if (!stmt || !stmt->conn || !stmt->result) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
@@ -964,7 +990,7 @@

 	DBG_ENTER("mysqlnd_fetch_stmt_row_cursor");

-	if (!stmt) {
+	if (!stmt || !stmt->conn || !result || !result->conn || !result->unbuf) {
 		DBG_ERR("no statement");
 		DBG_RETURN(FAIL);
 	}
@@ -1108,6 +1134,9 @@
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	enum_func_status ret;
 	DBG_ENTER("mysqlnd_stmt::fetch");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	if (!stmt->result ||
@@ -1161,6 +1190,9 @@
 	zend_uchar cmd_buf[STMT_ID_LENGTH /* statement id */];

 	DBG_ENTER("mysqlnd_stmt::reset");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	SET_EMPTY_ERROR(stmt->error_info);
@@ -1232,6 +1264,9 @@
 	enum php_mysqlnd_server_command cmd = COM_STMT_SEND_LONG_DATA;

 	DBG_ENTER("mysqlnd_stmt::send_long_data");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_no=%d data_len=%lu", stmt->stmt_id, param_no, length);

 	conn = stmt->conn;
@@ -1337,6 +1372,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_param");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_count=%u", stmt->stmt_id, stmt->param_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1406,6 +1444,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_one_parameter");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_no=%d param_count=%u type=%d",
 				stmt->stmt_id, param_no, stmt->param_count, type);

@@ -1426,6 +1467,9 @@
 	if (stmt->param_count) {
 		if (!stmt->param_bind) {
 			stmt->param_bind = mnd_ecalloc(stmt->param_count, sizeof(MYSQLND_PARAM_BIND));
+			if (!stmt->param_bind) {
+				DBG_RETURN(FAIL);
+			}
 		}

 		/* Prevent from freeing */
@@ -1457,6 +1501,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::refresh_bind_param");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu param_count=%u", stmt->stmt_id, stmt->param_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1484,6 +1531,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1535,6 +1585,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::bind_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (stmt->state < MYSQLND_STMT_PREPARED) {
@@ -1560,6 +1613,9 @@
 		} else {
 			stmt->result_bind = mnd_erealloc(stmt->result_bind, stmt->field_count * sizeof(MYSQLND_RESULT_BIND));
 		}
+		if (!stmt->result_bind) {
+			DBG_RETURN(FAIL);
+		}
 		ALLOC_INIT_ZVAL(stmt->result_bind[param_no].zv);
 		/*
 		  Don't update is_ref !!! it's not our job
@@ -1705,6 +1761,9 @@
 	MYSQLND_RES *result;

 	DBG_ENTER("mysqlnd_stmt::result_metadata");
+	if (!stmt) {
+		DBG_RETURN(NULL);
+	}
 	DBG_INF_FMT("stmt=%u field_count=%u", stmt->stmt_id, stmt->field_count);

 	if (!stmt->field_count || !stmt->conn || !stmt->result || !stmt->result->meta) {
@@ -1764,6 +1823,9 @@
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	unsigned long val = *(unsigned long *) value;
 	DBG_ENTER("mysqlnd_stmt::attr_set");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu attr_type=%u value=%lu", stmt->stmt_id, attr_type, val);

 	switch (attr_type) {
@@ -1812,6 +1874,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::attr_set");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu attr_type=%u", stmt->stmt_id, attr_type);

 	switch (attr_type) {
@@ -1839,6 +1904,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt::free_result");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	if (!stmt->result) {
@@ -1892,6 +1960,9 @@
 	unsigned int i;

 	DBG_ENTER("mysqlnd_stmt_separate_result_bind");
+	if (!stmt) {
+		DBG_VOID_RETURN;
+	}
 	DBG_INF_FMT("stmt=%lu result_bind=%p field_count=%u",
 				stmt->stmt_id, stmt->result_bind, stmt->field_count);

@@ -1944,6 +2015,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_stmt_separate_one_result_bind");
+	if (!stmt) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu result_bind=%p field_count=%u param_no=%d",
 				stmt->stmt_id, stmt->result_bind, stmt->field_count, param_no);

@@ -1992,6 +2066,9 @@
 {
 	MYSQLND_STMT_DATA * stmt = s? s->data:NULL;
 	DBG_ENTER("mysqlnd_internal_free_stmt_content");
+	if (!stmt) {
+		DBG_VOID_RETURN;
+	}
 	DBG_INF_FMT("stmt=%lu param_bind=%p param_count=%u",
 				stmt->stmt_id, stmt->param_bind, stmt->param_count);

@@ -2042,6 +2119,9 @@
 	enum_mysqlnd_collected_stats stat = STAT_LAST;

 	DBG_ENTER("mysqlnd_stmt::net_close");
+	if (!stmt || !stmt->conn) {
+		DBG_RETURN(FAIL);
+	}
 	DBG_INF_FMT("stmt=%lu", stmt->stmt_id);

 	conn = stmt->conn;
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to