summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <remi@remirepo.net>2022-12-19 14:53:02 +0100
committerRemi Collet <remi@php.net>2022-12-19 14:53:02 +0100
commitf9f72bd4cb74e3f817f206cb51ad4a41e4a8278e (patch)
tree7c66a24c5d998a56dcfcee1c321afe5449f62f7b
parent9a72ca7142dd3a381af44452f1a2d8bfdad33d4b (diff)
pdo: fix #81740: PDO::quote() may return unquoted string
CVE-2022-31631 use oracle client library version 21.8
-rw-r--r--.gitignore1
-rw-r--r--php-bug81740.patch84
-rw-r--r--php74.spec24
3 files changed, 107 insertions, 2 deletions
diff --git a/.gitignore b/.gitignore
index aca98dd..7ce5284 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+clog
package-*.xml
*.tgz
*.tar.gz
diff --git a/php-bug81740.patch b/php-bug81740.patch
new file mode 100644
index 0000000..4826efc
--- /dev/null
+++ b/php-bug81740.patch
@@ -0,0 +1,84 @@
+From 7cb160efe19d3dfb8b92629805733ea186b55050 Mon Sep 17 00:00:00 2001
+From: "Christoph M. Becker" <cmbecker69@gmx.de>
+Date: Mon, 31 Oct 2022 17:20:23 +0100
+Subject: [PATCH 1/2] Fix #81740: PDO::quote() may return unquoted string
+
+`sqlite3_snprintf()` expects its first parameter to be `int`; we need
+to avoid overflow.
+
+(cherry picked from commit 921b6813da3237a83e908998483f46ae3d8bacba)
+---
+ ext/pdo_sqlite/sqlite_driver.c | 3 +++
+ ext/pdo_sqlite/tests/bug81740.phpt | 17 +++++++++++++++++
+ 2 files changed, 20 insertions(+)
+ create mode 100644 ext/pdo_sqlite/tests/bug81740.phpt
+
+diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
+index 0595bd09feb..54f9d05e1e2 100644
+--- a/ext/pdo_sqlite/sqlite_driver.c
++++ b/ext/pdo_sqlite/sqlite_driver.c
+@@ -233,6 +233,9 @@ static char *pdo_sqlite_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t
+ /* NB: doesn't handle binary strings... use prepared stmts for that */
+ static int sqlite_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype )
+ {
++ if (unquotedlen > (INT_MAX - 3) / 2) {
++ return 0;
++ }
+ *quoted = safe_emalloc(2, unquotedlen, 3);
+ sqlite3_snprintf(2*unquotedlen + 3, *quoted, "'%q'", unquoted);
+ *quotedlen = strlen(*quoted);
+diff --git a/ext/pdo_sqlite/tests/bug81740.phpt b/ext/pdo_sqlite/tests/bug81740.phpt
+new file mode 100644
+index 00000000000..99fb07c3048
+--- /dev/null
++++ b/ext/pdo_sqlite/tests/bug81740.phpt
+@@ -0,0 +1,17 @@
++--TEST--
++Bug #81740 (PDO::quote() may return unquoted string)
++--SKIPIF--
++<?php
++if (!extension_loaded('pdo_sqlite')) print 'skip not loaded';
++if (getenv("SKIP_SLOW_TESTS")) die("skip slow test");
++?>
++--INI--
++memory_limit=-1
++--FILE--
++<?php
++$pdo = new PDO("sqlite::memory:");
++$string = str_repeat("a", 0x80000000);
++var_dump($pdo->quote($string));
++?>
++--EXPECT--
++bool(false)
+--
+2.38.1
+
+From 7328f3a0344806b846bd05657bdce96e47810bf0 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Mon, 19 Dec 2022 09:24:02 +0100
+Subject: [PATCH 2/2] NEWS
+
+---
+ NEWS | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/NEWS b/NEWS
+index 8a8c0c9285d..03e8c839c77 100644
+--- a/NEWS
++++ b/NEWS
+@@ -1,5 +1,12 @@
+ PHP NEWS
+ |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
++
++Backported from 8.0.27
++
++- PDO/SQLite:
++ . Fixed bug #81740 (PDO::quote() may return unquoted string).
++ (CVE-2022-31631) (cmb)
++
+ 03 Nov 2022, PHP 7.4.33
+
+ - GD:
+--
+2.38.1
+
diff --git a/php74.spec b/php74.spec
index 0077abb..702fe8f 100644
--- a/php74.spec
+++ b/php74.spec
@@ -24,7 +24,7 @@
%global mysql_sock %(mysql_config --socket 2>/dev/null || echo /var/lib/mysql/mysql.sock)
-%global oraclever 21.7
+%global oraclever 21.8
%global oraclelib 21.1
# Build for LiteSpeed Web Server (LSAPI)
@@ -96,7 +96,7 @@
Summary: PHP scripting language for creating dynamic web sites
Name: php
Version: %{upver}%{?rcver:~%{rcver}}
-Release: 1%{?dist}
+Release: 2%{?dist}
# All files licensed under PHP version 3.01, except
# Zend is licensed under Zend
# TSRM is licensed under BSD
@@ -160,6 +160,7 @@ Patch91: php-7.2.0-oci8conf.patch
# Upstream fixes (100+)
# Security fixes (200+)
+Patch200: php-bug81740.patch
# Fixes for tests (300+)
# Factory is droped from system tzdata
@@ -1154,6 +1155,7 @@ rm ext/openssl/tests/p12_with_extra_certs.p12
# upstream patches
# security patches
+%patch200 -p1 -b .bug81740
# Fixes for tests related to tzdata
%if 0%{?fedora} >= 29 || 0%{?rhel} >= 6
@@ -1994,6 +1996,19 @@ fi
%endif
+%posttrans common
+cat << EOF
+=====================================================================
+
+ WARNING : PHP 7.4 have reached its "End of Life" in
+ November 2022. Even, if this package includes some of
+ the important security fix, backported from 8.0, the
+ UPGRADE to a maintained version is very strongly RECOMMENDED.
+
+=====================================================================
+EOF
+
+
%{!?_licensedir:%global license %%doc}
%files
@@ -2161,6 +2176,11 @@ fi
%changelog
+* Mon Dec 19 2022 Remi Collet <remi@remirepo.net> - 7.4.33-1
+- pdo: fix #81740: PDO::quote() may return unquoted string
+ CVE-2022-31631
+- use oracle client library version 21.8
+
* Tue Nov 1 2022 Remi Collet <remi@remirepo.net> - 7.4.33-1
- Update to 7.4.33 - http://www.php.net/releases/7_4_33.php