iliaa Wed Oct 1 20:30:24 2008 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/pgsql pgsql.c
/php-src NEWS
Log:
Fixed bug #46206 (pg_query_params/pg_execute convert passed values to
strings).
http://cvs.php.net/viewvc.cgi/php-src/ext/pgsql/pgsql.c?r1=1.331.2.13.2.24.2.14&r2=1.331.2.13.2.24.2.15&diff_format=u
Index: php-src/ext/pgsql/pgsql.c
diff -u php-src/ext/pgsql/pgsql.c:1.331.2.13.2.24.2.14
php-src/ext/pgsql/pgsql.c:1.331.2.13.2.24.2.15
--- php-src/ext/pgsql/pgsql.c:1.331.2.13.2.24.2.14 Wed Sep 10 01:39:35 2008
+++ php-src/ext/pgsql/pgsql.c Wed Oct 1 20:30:23 2008
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pgsql.c,v 1.331.2.13.2.24.2.14 2008/09/10 01:39:35 iliaa Exp $ */
+/* $Id: pgsql.c,v 1.331.2.13.2.24.2.15 2008/10/01 20:30:23 iliaa Exp $ */
#include <stdlib.h>
@@ -1721,6 +1721,10 @@
static void _php_pgsql_free_params(char **params, int num_params)
{
if (num_params > 0) {
+ int i;
+ for (i = 0; i < num_params; i++) {
+ efree(params[i]);
+ }
efree(params);
}
}
@@ -1739,7 +1743,6 @@
int leftover = 0;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
PGconn *pgsql;
PGresult *pgsql_result;
ExecStatusType status;
@@ -1788,19 +1791,20 @@
RETURN_FALSE;
}
- otype = (*tmp)->type;
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params,
num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val),
Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_P(pv_param_arr));
@@ -1946,7 +1950,6 @@
int leftover = 0;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
PGconn *pgsql;
PGresult *pgsql_result;
ExecStatusType status;
@@ -1995,19 +1998,20 @@
RETURN_FALSE;
}
- otype = (*tmp)->type;
- SEPARATE_ZVAL(tmp);
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
} else {
- params[i] = Z_STRVAL_PP(tmp);
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params,
num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val),
Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_P(pv_param_arr));
@@ -4550,7 +4554,6 @@
zval *pgsql_link, *pv_param_arr, **tmp;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
char *query;
int query_len, id = -1;
PGconn *pgsql;
@@ -4592,20 +4595,20 @@
RETURN_FALSE;
}
- otype = (*tmp)->type;
- SEPARATE_ZVAL(tmp);
- convert_to_string_ex(tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params,
num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val),
Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_P(pv_param_arr));
@@ -4688,7 +4691,6 @@
zval *pv_param_arr, **tmp;
int num_params = 0;
char **params = NULL;
- unsigned char otype;
char *stmtname;
int stmtname_len, id = -1;
PGconn *pgsql;
@@ -4730,19 +4732,20 @@
RETURN_FALSE;
}
- otype = (*tmp)->type;
- convert_to_string(*tmp);
- if (Z_TYPE_PP(tmp) != IS_STRING) {
- php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
- _php_pgsql_free_params(params, num_params);
- RETURN_FALSE;
- }
-
- if (otype == IS_NULL) {
+ if (Z_TYPE_PP(tmp) == IS_NULL) {
params[i] = NULL;
- }
- else {
- params[i] = Z_STRVAL_PP(tmp);
+ } else {
+ zval tmp_val = **tmp;
+ zval_copy_ctor(&tmp_val);
+ convert_to_string(&tmp_val);
+ if (Z_TYPE(tmp_val) != IS_STRING) {
+ php_error_docref(NULL TSRMLS_CC,
E_WARNING,"Error converting parameter");
+ zval_dtor(&tmp_val);
+ _php_pgsql_free_params(params,
num_params);
+ RETURN_FALSE;
+ }
+ params[i] = estrndup(Z_STRVAL(tmp_val),
Z_STRLEN(tmp_val));
+ zval_dtor(&tmp_val);
}
zend_hash_move_forward(Z_ARRVAL_P(pv_param_arr));
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.337&r2=1.2027.2.547.2.965.2.338&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.337
php-src/NEWS:1.2027.2.547.2.965.2.338
--- php-src/NEWS:1.2027.2.547.2.965.2.337 Wed Oct 1 13:13:34 2008
+++ php-src/NEWS Wed Oct 1 20:30:23 2008
@@ -13,6 +13,8 @@
- Fixed bug causing the algorithm parameter of mhash() to be modified. (Scott)
+- Fixed bug #46206 (pg_query_params/pg_execute convert passed values to
+ strings). (Ilia)
- Fixed bug #46205 (Closure - Memory leaks when ReflectionException is thrown).
(Dmitry)
- Fixed bug #46194 (SIGSEGV when requested file is not found). (Greg)
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php