]> granicus.if.org Git - php/commitdiff
Fixed pdo_stmt.c: zval* being passed into zend_parse_parameters_ex
authorXinchen Hui <laruence@gmail.com>
Fri, 18 Mar 2016 03:50:03 +0000 (11:50 +0800)
committerXinchen Hui <laruence@gmail.com>
Fri, 18 Mar 2016 03:50:03 +0000 (11:50 +0800)
ext/pdo/pdo_stmt.c

index 6019c39aba510744284a15151e7fc8e189f4d478..c86864a966ab2d6a3c6a0935a74277b517ec1cdc 100644 (file)
@@ -1542,16 +1542,16 @@ static int register_bound_param(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt,
 {
        struct pdo_bound_param_data param = {{{0}}};
        zend_long param_type = PDO_PARAM_STR;
-       zval *parameter;
+       zval *parameter, *driver_params = NULL;
 
        param.paramno = -1;
 
        if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS(),
                        "lz|llz!", &param.paramno, &parameter, &param_type, &param.max_value_len,
-                       &param.driver_params)) {
+                       &driver_params)) {
                if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "Sz|llz!", &param.name,
                                &parameter, &param_type, &param.max_value_len,
-                               &param.driver_params)) {
+                               &driver_params)) {
                        return 0;
                }
        }
@@ -1565,6 +1565,10 @@ static int register_bound_param(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt,
                return 0;
        }
 
+       if (driver_params) {
+               ZVAL_COPY(&param.driver_params, driver_params);
+       }
+
        ZVAL_COPY(&param.parameter, parameter);
        if (!really_register_bound_param(&param, stmt, is_param)) {
                if (!Z_ISUNDEF(param.parameter)) {