From ac81cef4279fe40f616341ea82eba24b0c7f58ba Mon Sep 17 00:00:00 2001 From: SATO Kentaro Date: Mon, 6 Dec 2021 06:59:52 +0900 Subject: [PATCH] Fix error message allocation of PDO PgSQL. --- ext/pdo_pgsql/pgsql_driver.c | 2 +- ext/pdo_pgsql/tests/gh7723.phpt | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 ext/pdo_pgsql/tests/gh7723.phpt diff --git a/ext/pdo_pgsql/pgsql_driver.c b/ext/pdo_pgsql/pgsql_driver.c index a5b0a22f2057b..b6449095ca0cb 100644 --- a/ext/pdo_pgsql/pgsql_driver.c +++ b/ext/pdo_pgsql/pgsql_driver.c @@ -87,7 +87,7 @@ int _pdo_pgsql_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, int errcode, const char * } if (msg) { - einfo->errmsg = estrdup(msg); + einfo->errmsg = pestrdup(msg, dbh->is_persistent); } else if (errmsg) { einfo->errmsg = _pdo_pgsql_trim_message(errmsg, dbh->is_persistent); diff --git a/ext/pdo_pgsql/tests/gh7723.phpt b/ext/pdo_pgsql/tests/gh7723.phpt new file mode 100644 index 0000000000000..bbbf5fd5bc21c --- /dev/null +++ b/ext/pdo_pgsql/tests/gh7723.phpt @@ -0,0 +1,30 @@ +--TEST-- +GitHub #7723 (Fix error message allocation of PDO PgSQL) +--SKIPIF-- + +--FILE-- +setAttribute(PDO::ATTR_PERSISTENT, true); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); +$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + +$st = $db->prepare('select 1'); +for ($i = 0; ++$i <= 2;) { + try { + $st->bindValue(':invalid', $i); + } catch (PDOException $e) { + echo $e->getMessage() . "\n"; + } +} +?> +--EXPECT-- +SQLSTATE[HY093]: Invalid parameter number: :invalid +SQLSTATE[HY093]: Invalid parameter number: :invalid