Commit ef87a146fb8 for php.net
commit ef87a146fb8a12398bc0ffc58b3493991f818167
Author: Niels Dossche <7771979+ndossche@users.noreply.github.com>
Date: Mon Dec 22 15:39:09 2025 -0800
pgsql: Don't allocate memory for default arguments (#20757)
diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c
index 77425b25aee..e3d8cb82ece 100644
--- a/ext/pgsql/pgsql.c
+++ b/ext/pgsql/pgsql.c
@@ -3350,9 +3350,8 @@ PHP_FUNCTION(pg_copy_to)
pgsql_link_handle *link;
zend_string *table_name;
zend_string *pg_delimiter = NULL;
- char *pg_null_as = NULL;
+ char *pg_null_as = "\\\\N";
size_t pg_null_as_len = 0;
- bool free_pg_null = false;
char *query;
PGconn *pgsql;
PGresult *pgsql_result;
@@ -3377,10 +3376,6 @@ PHP_FUNCTION(pg_copy_to)
zend_argument_value_error(3, "must be one character");
RETURN_THROWS();
}
- if (!pg_null_as) {
- pg_null_as = estrdup("\\\\N");
- free_pg_null = true;
- }
spprintf(&query, 0, "COPY %s TO STDOUT DELIMITER E'%c' NULL AS E'%s'", ZSTR_VAL(table_name), *ZSTR_VAL(pg_delimiter), pg_null_as);
@@ -3388,9 +3383,6 @@ PHP_FUNCTION(pg_copy_to)
PQclear(pgsql_result);
}
pgsql_result = PQexec(pgsql, query);
- if (free_pg_null) {
- efree(pg_null_as);
- }
efree(query);
if (pgsql_result) {
@@ -3475,9 +3467,8 @@ PHP_FUNCTION(pg_copy_from)
zval *value;
zend_string *table_name;
zend_string *pg_delimiter = NULL;
- char *pg_null_as = NULL;
+ char *pg_null_as = "\\\\N";
size_t pg_null_as_len;
- bool pg_null_as_free = false;
char *query;
PGconn *pgsql;
PGresult *pgsql_result;
@@ -3502,10 +3493,6 @@ PHP_FUNCTION(pg_copy_from)
zend_argument_value_error(4, "must be one character");
RETURN_THROWS();
}
- if (!pg_null_as) {
- pg_null_as = estrdup("\\\\N");
- pg_null_as_free = true;
- }
spprintf(&query, 0, "COPY %s FROM STDIN DELIMITER E'%c' NULL AS E'%s'", ZSTR_VAL(table_name), *ZSTR_VAL(pg_delimiter), pg_null_as);
while ((pgsql_result = PQgetResult(pgsql))) {
@@ -3513,9 +3500,6 @@ PHP_FUNCTION(pg_copy_from)
}
pgsql_result = PQexec(pgsql, query);
- if (pg_null_as_free) {
- efree(pg_null_as);
- }
efree(query);
if (pgsql_result) {