Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F110108875
D30117.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D30117.diff
View Options
diff --git a/databases/php80-pdo_pgsql/Makefile b/databases/php80-pdo_pgsql/Makefile
--- a/databases/php80-pdo_pgsql/Makefile
+++ b/databases/php80-pdo_pgsql/Makefile
@@ -1,5 +1,7 @@
CATEGORIES= databases
+PORTREVISION= 1
+
MASTERDIR= ${.CURDIR}/../../lang/php80
PKGNAMESUFFIX= -pdo_pgsql
diff --git a/databases/php80-pdo_pgsql/files/patch-pgsql__statement.c b/databases/php80-pdo_pgsql/files/patch-pgsql__statement.c
new file mode 100644
--- /dev/null
+++ b/databases/php80-pdo_pgsql/files/patch-pgsql__statement.c
@@ -0,0 +1,42 @@
+--- pgsql_statement.c.orig 2021-05-05 08:26:44 UTC
++++ pgsql_statement.c
+@@ -52,21 +52,6 @@
+ #define VARCHARLABEL "varchar"
+ #define VARCHAROID 1043
+
+-#define PG_INT32_MIN (-0x7FFFFFFF-1)
+-#define PG_INT32_MAX (0x7FFFFFFF)
+-
+-#if defined(_MSC_VER)
+-# define strtoll(s, f, b) _atoi64(s)
+-#elif !defined(HAVE_STRTOLL)
+-# if defined(HAVE_ATOLL)
+-# define strtoll(s, f, b) atoll(s)
+-# else
+-# define strtoll(s, f, b) strtol(s, f, b)
+-# endif
+-#endif
+-
+-
+-
+ static int pgsql_stmt_dtor(pdo_stmt_t *stmt)
+ {
+ pdo_pgsql_stmt *S = (pdo_pgsql_stmt*)stmt->driver_data;
+@@ -401,16 +386,7 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, str
+ S->param_formats[param->paramno] = 0;
+ }
+
+- if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_INT) {
+- /* we need to check if the number requires bigints */
+- long long val = strtoll(Z_STRVAL_P(parameter), NULL, 10);
+-
+- if (val > PG_INT32_MAX || val < PG_INT32_MIN) {
+- S->param_types[param->paramno] = INT8OID;
+- } else {
+- S->param_types[param->paramno] = INT4OID;
+- }
+- } else if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) {
++ if (PDO_PARAM_TYPE(param->param_type) == PDO_PARAM_LOB) {
+ S->param_types[param->paramno] = 0;
+ S->param_formats[param->paramno] = 1;
+ } else {
diff --git a/databases/php80-pdo_pgsql/files/patch-tests_bug__80892.phpt b/databases/php80-pdo_pgsql/files/patch-tests_bug__80892.phpt
new file mode 100644
--- /dev/null
+++ b/databases/php80-pdo_pgsql/files/patch-tests_bug__80892.phpt
@@ -0,0 +1,80 @@
+--- tests/bug_80892.phpt.orig 2021-05-05 08:30:53 UTC
++++ tests/bug_80892.phpt
+@@ -1,77 +0,0 @@
+---TEST--
+-Bug #80892 PDO::PARAM_INT is treated the same as PDO::PARAM_STR
+---SKIPIF--
+-<?php
+-if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
+-require __DIR__ . '/config.inc';
+-require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
+-PDOTest::skip();
+-?>
+---FILE--
+-<?php
+-require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
+-
+-/** @var PDO $db */
+-$db = PDOTest::test_factory(__DIR__ . '/common.phpt');
+-$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
+-$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
+-
+-$db->exec("CREATE OR REPLACE FUNCTION bug80892 (x bigint) RETURNS varchar AS $$ SELECT 'bigint' $$ LANGUAGE sql");
+-$db->exec("CREATE OR REPLACE FUNCTION bug80892 (x int) RETURNS varchar AS $$ SELECT 'int' $$ LANGUAGE sql");
+-$db->exec("CREATE OR REPLACE FUNCTION bug80892 (x text) RETURNS varchar AS $$ SELECT 'text' $$ LANGUAGE sql");
+-
+-// Sanity check
+-var_dump($db->query("SELECT bug80892(2147483648)")->fetchColumn());
+-var_dump($db->query("SELECT bug80892(1)")->fetchColumn());
+-var_dump($db->query("SELECT bug80892('1')")->fetchColumn());
+-
+-// No binding
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->execute([1]);
+-var_dump($stmt->fetchColumn());
+-
+-// Bind int value as string
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->bindValue(1, 1, PDO::PARAM_STR);
+-$stmt->execute();
+-var_dump($stmt->fetchColumn());
+-
+-// Bind int value as int
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->bindValue(1, 1, PDO::PARAM_INT);
+-$stmt->execute();
+-var_dump($stmt->fetchColumn());
+-
+-// Bind string value as int
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->bindValue(1, '1', PDO::PARAM_INT);
+-$stmt->execute();
+-var_dump($stmt->fetchColumn());
+-
+-// Bind bigint string value as int
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->bindValue(1, '2147483648', PDO::PARAM_INT);
+-$stmt->execute();
+-var_dump($stmt->fetchColumn());
+-
+-// Bind negative bigint (string on 32bit) as int
+-$stmt = $db->prepare("SELECT bug80892(?)");
+-$stmt->bindValue(1, PHP_INT_SIZE == 4 ? '-33333333333' : -33333333333, PDO::PARAM_INT);
+-$stmt->execute();
+-var_dump($stmt->fetchColumn());
+-
+-$db->exec("DROP FUNCTION bug80892 (bigint)");
+-$db->exec("DROP FUNCTION bug80892 (int)");
+-$db->exec("DROP FUNCTION bug80892 (text)");
+-
+-?>
+---EXPECT--
+-string(6) "bigint"
+-string(3) "int"
+-string(4) "text"
+-string(4) "text"
+-string(4) "text"
+-string(3) "int"
+-string(3) "int"
+-string(6) "bigint"
+-string(6) "bigint"
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Feb 14, 5:47 PM (20 h, 14 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16645895
Default Alt Text
D30117.diff (4 KB)
Attached To
Mode
D30117: Fix PDO Bug in PHP 8
Attached
Detach File
Event Timeline
Log In to Comment