Commit:    967a1ebe5147e3892559f029a95514fd449e0c6a
Author:    Andrey Hristov <and...@php.net>         Thu, 18 Oct 2012 15:09:17 
+0200
Parents:   4eece4c86a74e18b916a4c052eb72c1977732828
Branches:  master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=967a1ebe5147e3892559f029a95514fd449e0c6a

Log:
add protection against core dumps if the underlying library returns
0x0 for some reason

Changed paths:
  M  ext/mysqli/mysqli_api.c
  M  ext/mysqli/tests/mysqli_class_mysqli_interface.phpt
  M  ext/mysqli/tests/mysqli_info.phpt


Diff:
diff --git a/ext/mysqli/mysqli_api.c b/ext/mysqli/mysqli_api.c
index 3940736..1ac9173 100644
--- a/ext/mysqli/mysqli_api.c
+++ b/ext/mysqli/mysqli_api.c
@@ -566,14 +566,17 @@ PHP_FUNCTION(mysqli_character_set_name)
 {
        MY_MYSQL        *mysql;
        zval            *mysql_link;
+       const char      *cs_name;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
                return;
        }
 
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
-
-       RETURN_STRING((char *)mysql_character_set_name(mysql->mysql), 1);
+       cs_name = mysql_character_set_name(mysql->mysql);
+       if (cs_name) {
+               RETURN_STRING(cs_name, 1);
+       }
 }
 /* }}} */
 
@@ -732,12 +735,16 @@ PHP_FUNCTION(mysqli_error)
 {
        MY_MYSQL        *mysql;
        zval            *mysql_link;
+       const char      *err;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
                return;
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
-       RETURN_STRING((char *)mysql_error(mysql->mysql),1);
+       err = mysql_error(mysql->mysql);
+       if (err) {
+               RETURN_STRING(err, 1);
+       }
 }
 /* }}} */
 
@@ -1268,7 +1275,10 @@ PHP_FUNCTION(mysqli_free_result)
    Get MySQL client info */
 PHP_FUNCTION(mysqli_get_client_info)
 {
-       RETURN_STRING((char *)mysql_get_client_info(), 1);
+       const char * info = mysql_get_client_info();
+       if (info) {
+               RETURN_STRING(info, 1);
+       }
 }
 /* }}} */
 
@@ -1320,15 +1330,18 @@ PHP_FUNCTION(mysqli_get_server_info)
 {
        MY_MYSQL        *mysql;
        zval            *mysql_link = NULL;
+       const char      *info;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
                return;
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
 
-       RETURN_STRING((char *)mysql_get_server_info(mysql->mysql), 1);
+       info = mysql_get_server_info(mysql->mysql);
+       if (info) {
+               RETURN_STRING(info, 1);
+       }
 }
-
 /* }}} */
 
 /* {{{ proto int mysqli_get_server_version(object link)
@@ -1361,7 +1374,9 @@ PHP_FUNCTION(mysqli_info)
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
 
        info = mysql_info(mysql->mysql);
-       RETURN_STRING((info) ? (char *)info : "", 1);
+       if (info) {
+               RETURN_STRING(info, 1);
+       }
 }
 /* }}} */
 
@@ -2096,12 +2111,16 @@ PHP_FUNCTION(mysqli_sqlstate)
 {
        MY_MYSQL        *mysql;
        zval            *mysql_link;
+       const char      *state;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_link, mysqli_link_class_entry) == FAILURE) {
                return;
        }
        MYSQLI_FETCH_RESOURCE_CONN(mysql, &mysql_link, MYSQLI_STATUS_VALID);
-       RETURN_STRING((char *)mysql_sqlstate(mysql->mysql),1);
+       state = mysql_sqlstate(mysql->mysql);
+       if (state) {
+               RETURN_STRING(state, 1);
+       }
 }
 /* }}} */
 
@@ -2279,13 +2298,17 @@ PHP_FUNCTION(mysqli_stmt_error)
 {
        MY_STMT *stmt;
        zval    *mysql_stmt;
+       const char * err;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
                return;
        }
        MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, 
MYSQLI_STATUS_INITIALIZED);
 
-       RETURN_STRING((char *)mysql_stmt_error(stmt->stmt),1);
+       err = mysql_stmt_error(stmt->stmt);
+       if (err) {
+               RETURN_STRING(err, 1);
+       }
 }
 /* }}} */
 
@@ -2424,13 +2447,17 @@ PHP_FUNCTION(mysqli_stmt_sqlstate)
 {
        MY_STMT *stmt;
        zval    *mysql_stmt;
+       const char * state;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), 
"O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
                return;
        }
        MYSQLI_FETCH_RESOURCE_STMT(stmt, &mysql_stmt, MYSQLI_STATUS_VALID);
 
-       RETURN_STRING((char *)mysql_stmt_sqlstate(stmt->stmt),1);
+       state = mysql_stmt_sqlstate(stmt->stmt);
+       if (state) {
+               RETURN_STRING(state, 1);
+       }
 }
 /* }}} */
 
diff --git a/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt 
b/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt
index 1865943..19ba008 100644
--- a/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt
+++ b/ext/mysqli/tests/mysqli_class_mysqli_interface.phpt
@@ -295,7 +295,7 @@ mysqli->insert_id = '0'/integer ('0'/integer)
 mysqli->sqlstate = '00000'/%unicode|string% ('00000'/%unicode|string%)
 mysqli->stat = 'Uptime: %d  Threads: %d  Questions: %d  Slow queries: %d  
Opens: %d  Flush tables: %d  Open tables: %d  Queries per second avg: 
%d.%d'/string ('Uptime: %d  Threads: %d  Questions: %d  Slow queries: %d  
Opens: %d  Flush tables: %d  Open tables: %d  Queries per second avg: 
%d.%d'/string)
 mysqli->host_info = '%s'/%unicode|string% ('%s'/%unicode|string%)
-mysqli->info = ''/NULL (''/%unicode|string%)
+mysqli->info = ''/NULL (''/NULL)
 mysqli->thread_id = '%d'/integer ('%d'/integer)
 mysqli->protocol_version = '%d'/integer ('%d'/integer)
 mysqli->server_info = '%s'/%unicode|string% ('%s'/%unicode|string%)
diff --git a/ext/mysqli/tests/mysqli_info.phpt 
b/ext/mysqli/tests/mysqli_info.phpt
index 2d5004f..6bb5d21 100644
--- a/ext/mysqli/tests/mysqli_info.phpt
+++ b/ext/mysqli/tests/mysqli_info.phpt
@@ -21,8 +21,8 @@ require_once('skipifconnectfailure.inc');
                printf("[003] [%d] %s\n", mysqli_errno($link), 
mysqli_error($link));
 
        // NOTE: empty string, no multiple insert syntax
-       if (!is_string($tmp = mysqli_info($link)) || ('' != $tmp))
-               printf("[004] Expecting string/empty, got %s/%s\n", 
gettype($tmp), $tmp);
+       if (!is_null($tmp = mysqli_info($link)) || ('' != $tmp))
+               printf("[004] Expecting null, got %s/%s\n", gettype($tmp), 
$tmp);
 
        if (!$res = mysqli_query($link, "INSERT INTO test(id, label) VALUES 
(101, 'a'), (102, 'b')"))
                printf("[005] [%d] %s\n", mysqli_errno($link), 
mysqli_error($link));
@@ -54,8 +54,8 @@ require_once('skipifconnectfailure.inc');
        if (!$res = mysqli_query($link, "SELECT 1"))
                printf("[013] [%d] %s\n", mysqli_errno($link), 
mysqli_error($link));
 
-       if (!is_string($tmp = mysqli_info($link)) || ('' != $tmp))
-               printf("[014] Expecting string/empty, got %s/%s\n", 
gettype($tmp), $tmp);
+       if (!is_null($tmp = mysqli_info($link)) || ('' != $tmp))
+               printf("[014] Expecting null, got %s/%s\n", gettype($tmp), 
$tmp);
        mysqli_free_result($res);
 
        // NOTE: no LOAD DATA INFILE test


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

Reply via email to