diff options
author | George Peter Banyard <girgias@php.net> | 2020-07-03 13:43:29 +0200 |
---|---|---|
committer | George Peter Banyard <girgias@php.net> | 2020-09-15 19:12:02 +0200 |
commit | 7a95e943d642e05532979a06221c476183eac7e4 (patch) | |
tree | ded828cad622e5e55e06ec70c9e044e834fffc94 /ext/mysqli/mysqli_nonapi.c | |
parent | 7e61c2edd8456ff502e17e14d517da409f1e6193 (diff) | |
download | php-git-7a95e943d642e05532979a06221c476183eac7e4.tar.gz |
Promote warnings to Error in MySQLi extension
Closes GH-5803
Diffstat (limited to 'ext/mysqli/mysqli_nonapi.c')
-rw-r--r-- | ext/mysqli/mysqli_nonapi.c | 69 |
1 files changed, 37 insertions, 32 deletions
diff --git a/ext/mysqli/mysqli_nonapi.c b/ext/mysqli/mysqli_nonapi.c index 9b675bb526..394afc7ccc 100644 --- a/ext/mysqli/mysqli_nonapi.c +++ b/ext/mysqli/mysqli_nonapi.c @@ -28,6 +28,7 @@ #include "zend_smart_str.h" #include "php_mysqli_structs.h" #include "mysqli_priv.h" +#define ERROR_ARG_POS(arg_num) (getThis() ? (arg_num-1) : (arg_num)) #define SAFE_STR(a) ((a)?a:"") @@ -435,9 +436,9 @@ PHP_FUNCTION(mysqli_fetch_all) MYSQLI_FETCH_RESOURCE(result, MYSQL_RES *, mysql_result, "mysqli_result", MYSQLI_STATUS_VALID); if (!mode || (mode & ~MYSQLND_FETCH_BOTH)) { - php_error_docref(NULL, E_WARNING, "Mode can be only MYSQLI_FETCH_NUM, " - "MYSQLI_FETCH_ASSOC or MYSQLI_FETCH_BOTH"); - RETURN_FALSE; + zend_argument_value_error(ERROR_ARG_POS(2), "must be one of MYSQLI_FETCH_NUM, " + "MYSQLI_FETCH_ASSOC, or MYSQLI_FETCH_BOTH"); + RETURN_THROWS(); } mysqlnd_fetch_all(result, mode, return_value); @@ -631,16 +632,18 @@ PHP_FUNCTION(mysqli_query) } if (!query_len) { - php_error_docref(NULL, E_WARNING, "Empty query"); - RETURN_FALSE; + zend_argument_value_error(ERROR_ARG_POS(2), "cannot be empty"); + RETURN_THROWS(); } -#ifdef MYSQLI_USE_MYSQLND - if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~(MYSQLI_ASYNC | MYSQLI_STORE_RESULT_COPY_DATA)) != MYSQLI_STORE_RESULT) { -#else - if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { -#endif - php_error_docref(NULL, E_WARNING, "Invalid value for resultmode"); - RETURN_FALSE; + if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && + MYSQLI_STORE_RESULT != (resultmode & ~(MYSQLI_ASYNC | MYSQLI_STORE_RESULT_COPY_DATA)) + ) { + zend_argument_value_error(ERROR_ARG_POS(3), "must be either MYSQLI_USE_RESULT, or MYSQLI_STORE_RESULT" + #ifdef MYSQLI_USE_MYSQLND + " with MYSQLI_ASYNC as an optional bitmask flag" + #endif + ); + RETURN_THROWS(); } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); @@ -722,7 +725,8 @@ static int mysqlnd_zval_array_to_mysqlnd_array(zval *in_array, MYSQLND ***out_ar i++; if (Z_TYPE_P(elem) != IS_OBJECT || !instanceof_function(Z_OBJCE_P(elem), mysqli_link_class_entry)) { - php_error_docref(NULL, E_WARNING, "Parameter %d not a mysqli object", i); + zend_argument_type_error(i, "must be an instance of mysqli, %s given", zend_zval_type_name(elem)); + return FAILURE; } else { MY_MYSQL *mysql; MYSQLI_RESOURCE *my_res; @@ -831,11 +835,16 @@ PHP_FUNCTION(mysqli_poll) if (zend_parse_parameters(ZEND_NUM_ARGS(), "a!a!al|l", &r_array, &e_array, &dont_poll_array, &sec, &usec) == FAILURE) { RETURN_THROWS(); } - if (sec < 0 || usec < 0) { - php_error_docref(NULL, E_WARNING, "Negative values passed for sec and/or usec"); - RETURN_FALSE; + if (sec < 0) { + zend_argument_value_error(4, "must be greater than or equal to 0"); + RETURN_THROWS(); + } + if (usec < 0) { + zend_argument_value_error(5, "must be greater than or equal to 0"); + RETURN_THROWS(); } + // TODO Error promotion if (!r_array && !e_array) { php_error_docref(NULL, E_WARNING, "No stream arrays were passed"); RETURN_FALSE; @@ -1152,22 +1161,18 @@ PHP_FUNCTION(mysqli_begin_transaction) zend_long flags = TRANS_START_NO_OPT; char * name = NULL; size_t name_len = -1; - zend_bool err = FALSE; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|ls!", &mysql_link, mysqli_link_class_entry, &flags, &name, &name_len) == FAILURE) { RETURN_THROWS(); } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); if (flags < 0) { - php_error_docref(NULL, E_WARNING, "Invalid value for parameter flags (" ZEND_LONG_FMT ")", flags); - err = TRUE; + zend_argument_value_error(ERROR_ARG_POS(2), "must be one of the MYSQLI_TRANS_* constants"); + RETURN_THROWS(); } if (!name_len) { - php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); - err = TRUE; - } - if (TRUE == err) { - RETURN_FALSE; + zend_argument_value_error(ERROR_ARG_POS(3), "cannot be empty"); + RETURN_THROWS(); } #ifndef MYSQLI_USE_MYSQLND @@ -1203,15 +1208,15 @@ PHP_FUNCTION(mysqli_savepoint) MY_MYSQL *mysql; zval *mysql_link; char * name = NULL; - size_t name_len = -1; + size_t name_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { RETURN_THROWS(); } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - if (!name || !name_len) { - php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); - RETURN_FALSE; + if (name_len == 0) { + zend_argument_value_error(ERROR_ARG_POS(2), "cannot be empty"); + RETURN_THROWS(); } #ifndef MYSQLI_USE_MYSQLND @@ -1231,15 +1236,15 @@ PHP_FUNCTION(mysqli_release_savepoint) MY_MYSQL *mysql; zval *mysql_link; char * name = NULL; - size_t name_len = -1; + size_t name_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Os", &mysql_link, mysqli_link_class_entry, &name, &name_len) == FAILURE) { RETURN_THROWS(); } MYSQLI_FETCH_RESOURCE_CONN(mysql, mysql_link, MYSQLI_STATUS_VALID); - if (!name || !name_len) { - php_error_docref(NULL, E_WARNING, "Savepoint name cannot be empty"); - RETURN_FALSE; + if (name_len == 0) { + zend_argument_value_error(ERROR_ARG_POS(2), "cannot be empty"); + RETURN_THROWS(); } #ifndef MYSQLI_USE_MYSQLND if (mysqli_savepoint_libmysql(mysql->mysql, name, TRUE)) { |