com php-src: Fixed REFERENCE handling: ext/pdo/pdo_sql_pars er.c ext/pdo/pdo_sql_parser.re ext/pdo_mysql/test s/common.phpt
ext/pdo_mysql/tests/config.inc

From: Date: Thu, 08 May 2014 08:11:50 +0000
Subject: com php-src: Fixed REFERENCE handling: ext/pdo/pdo_sql_pars er.c ext/pdo/pdo_sql_parser.re ext/pdo_mysql/test s/common.phpt
ext/pdo_mysql/tests/config.inc
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-78204@lists.php.net to get a copy of this message
Commit: be79628b8747ea1311964d9834d99c06abe76278 Author: Xinchen Hui <laruence@php.net> Thu, 8 May 2014 16:11:50 +0800 Parents: c242518bf0d2c3132c60c8f8dfba64329f73e90e Branches: phpng Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=be79628b8747ea1311964d9834d99c06abe76278 Log: Fixed REFERENCE handling Changed paths: M ext/pdo/pdo_sql_parser.c M ext/pdo/pdo_sql_parser.re M ext/pdo_mysql/tests/common.phpt M ext/pdo_mysql/tests/config.inc Diff: diff --git a/ext/pdo/pdo_sql_parser.c b/ext/pdo/pdo_sql_parser.c index 50b2b5d..cf10899 100644 --- a/ext/pdo/pdo_sql_parser.c +++ b/ext/pdo/pdo_sql_parser.c @@ -527,7 +527,7 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { int ok = 1; for (plc = placeholders; plc; plc = plc->next) { - if ((params = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { + if ((param = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { ok = 0; break; } @@ -561,10 +561,16 @@ safe: goto clean_up; } if (stmt->dbh->methods->quoter) { - if (param->param_type == PDO_PARAM_LOB && Z_TYPE(param->parameter) == IS_RESOURCE) { + zval *parameter; + if (Z_ISREF(param->parameter)) { + parameter = Z_REFVAL(param->parameter); + } else { + parameter = &param->parameter; + } + if (param->param_type == PDO_PARAM_LOB && Z_TYPE_P(parameter) == IS_RESOURCE) { php_stream *stm; - php_stream_from_zval_no_verify(stm, &param->parameter); + php_stream_from_zval_no_verify(stm, parameter); if (stm) { zend_string *buf; @@ -590,7 +596,7 @@ safe: plc->freeq = 1; } else { zval tmp_param; - ZVAL_DUP(&tmp_param, &param->parameter); + ZVAL_DUP(&tmp_param, parameter); switch (Z_TYPE(tmp_param)) { case IS_NULL: plc->quoted = "NULL"; @@ -625,8 +631,14 @@ safe: zval_dtor(&tmp_param); } } else { - plc->quoted = Z_STRVAL(param->parameter); - plc->qlen = Z_STRLEN(param->parameter); + zval *parameter; + if (Z_ISREF(param->parameter)) { + parameter = Z_REFVAL(param->parameter); + } else { + parameter = &param->parameter; + } + plc->quoted = Z_STRVAL_P(parameter); + plc->qlen = Z_STRLEN_P(parameter); } newbuffer_len += plc->qlen; } diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re index 4a206c7..48d80e2 100644 --- a/ext/pdo/pdo_sql_parser.re +++ b/ext/pdo/pdo_sql_parser.re @@ -169,7 +169,7 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len, if (query_type != PDO_PLACEHOLDER_POSITIONAL && bindno > zend_hash_num_elements(params)) { int ok = 1; for (plc = placeholders; plc; plc = plc->next) { - if ((params = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { + if ((param = zend_hash_str_find_ptr(params, plc->pos, plc->len)) == NULL) { ok = 0; break; } @@ -203,10 +203,16 @@ safe: goto clean_up; } if (stmt->dbh->methods->quoter) { - if (param->param_type == PDO_PARAM_LOB && Z_TYPE(param->parameter) == IS_RESOURCE) { + zval *parameter; + if (Z_ISREF(param->parameter)) { + parameter = Z_REFVAL(param->parameter); + } else { + parameter = &param->parameter; + } + if (param->param_type == PDO_PARAM_LOB && Z_TYPE_P(parameter) == IS_RESOURCE) { php_stream *stm; - php_stream_from_zval_no_verify(stm, &param->parameter); + php_stream_from_zval_no_verify(stm, parameter); if (stm) { zend_string *buf; @@ -232,7 +238,7 @@ safe: plc->freeq = 1; } else { zval tmp_param; - ZVAL_DUP(&tmp_param, &param->parameter); + ZVAL_DUP(&tmp_param, parameter); switch (Z_TYPE(tmp_param)) { case IS_NULL: plc->quoted = "NULL"; @@ -267,8 +273,14 @@ safe: zval_dtor(&tmp_param); } } else { - plc->quoted = Z_STRVAL(param->parameter); - plc->qlen = Z_STRLEN(param->parameter); + zval *parameter; + if (Z_ISREF(param->parameter)) { + parameter = Z_REFVAL(param->parameter); + } else { + parameter = &param->parameter; + } + plc->quoted = Z_STRVAL_P(parameter); + plc->qlen = Z_STRLEN_P(parameter); } newbuffer_len += plc->qlen; } diff --git a/ext/pdo_mysql/tests/common.phpt b/ext/pdo_mysql/tests/common.phpt index f55d1f8..18c5c1b 100644 --- a/ext/pdo_mysql/tests/common.phpt +++ b/ext/pdo_mysql/tests/common..phpt @@ -20,7 +20,7 @@ if (false !== getenv('PDO_MYSQL_TEST_DSN')) { $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_MYSQL_TEST_ATTR'); } } else { - $config['ENV']['PDOTEST_DSN'] = 'mysql:host=localhost;dbname=test'; + $config['ENV']['PDOTEST_DSN'] = 'mysql:host=127.0.0.1;port=3308;dbname=test'; $config['ENV']['PDOTEST_USER'] = 'root'; $config['ENV']['PDOTEST_PASS'] = ''; } diff --git a/ext/pdo_mysql/tests/config.inc b/ext/pdo_mysql/tests/config.inc index 2530442..21f33a2 100644 --- a/ext/pdo_mysql/tests/config.inc +++ b/ext/pdo_mysql/tests/config.inc @@ -10,7 +10,7 @@ if (false !== getenv('PDO_MYSQL_TEST_DSN')) { $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_MYSQL_TEST_ATTR'); } } else { - $config['ENV']['PDOTEST_DSN'] = 'mysql:host=localhost;dbname=test'; + $config['ENV']['PDOTEST_DSN'] = 'mysql:host=127.0.0.1;port=3308;dbname=test'; $config['ENV']['PDOTEST_USER'] = 'root'; $config['ENV']['PDOTEST_PASS'] = ''; } @@ -49,4 +49,4 @@ if (!function_exists('sys_get_temp_dir')) { return FALSE; } } -?> \ No newline at end of file +?>

« previous php.cvs (#78204) next »