From 893665d1bdf6008a47f73bda145264a5cd49c4c0 Mon Sep 17 00:00:00 2001 From: neonene <53406459+neonene@users.noreply.github.com> Date: Mon, 23 May 2022 15:18:08 +0900 Subject: [PATCH 1/8] gh-92434: Silence a compiler warning in _sqlite/connection.c for 32bit version --- Modules/_sqlite/connection.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 7f7de8e709228d..4ac0078eb83c21 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2091,7 +2091,7 @@ serialize_impl(pysqlite_Connection *self, const char *name) name); return NULL; } - PyObject *res = PyBytes_FromStringAndSize(data, size); + PyObject *res = PyBytes_FromStringAndSize(data, (Py_ssize_t)size); if (!(flags & SQLITE_SERIALIZE_NOCOPY)) { sqlite3_free((void *)data); } From 3fbf0d02bf85ed5221c756dc5c10886c4d51faa6 Mon Sep 17 00:00:00 2001 From: neonene <53406459+neonene@users.noreply.github.com> Date: Wed, 25 May 2022 06:26:02 +0900 Subject: [PATCH 2/8] check the size of serialized data --- Modules/_sqlite/connection.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 4ac0078eb83c21..48b3858d134482 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2091,6 +2091,13 @@ serialize_impl(pysqlite_Connection *self, const char *name) name); return NULL; } +#if PY_SSIZE_T_MAX < 9223372036854775807 + if (size > PY_SSIZE_T_MAX) { + PyErr_Format(PyExc_OverflowError, + "serialized '%s' too large to convert to bytes", name); + return NULL; + } +#endif PyObject *res = PyBytes_FromStringAndSize(data, (Py_ssize_t)size); if (!(flags & SQLITE_SERIALIZE_NOCOPY)) { sqlite3_free((void *)data); From ca1810f600c5011ffb565bedfc53d49655cdc822 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Wed, 25 May 2022 04:48:31 +0000 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst diff --git a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst new file mode 100644 index 00000000000000..7d10afb082b3fb --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst @@ -0,0 +1,2 @@ +:meth:`~sqlite3.Connection.serialize` raises :exc:`OverflowError` on 32bit Python +when more than ``Py_SSIZE_T_MAX`` bytes of serialization occurs. From 7bb93cd48e9d9f7204c2238fe98a0ddeccbacc84 Mon Sep 17 00:00:00 2001 From: neonene Date: Fri, 3 Jun 2022 05:05:55 +0900 Subject: [PATCH 4/8] Use INT_MAX, update NEWS --- .../Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst | 4 ++-- Modules/_sqlite/connection.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst index 7d10afb082b3fb..bd4d94696c9e73 100644 --- a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst +++ b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst @@ -1,2 +1,2 @@ -:meth:`~sqlite3.Connection.serialize` raises :exc:`OverflowError` on 32bit Python -when more than ``Py_SSIZE_T_MAX`` bytes of serialization occurs. +:meth:`sqlite3.Connection.serialize` now raises :exc:`OverflowError` on 32-bit +platforms if the serialized database exceeds ``Py_SSIZE_T_MAX`` bytes. diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 48b3858d134482..f7b8995448bc7b 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2092,7 +2092,7 @@ serialize_impl(pysqlite_Connection *self, const char *name) return NULL; } #if PY_SSIZE_T_MAX < 9223372036854775807 - if (size > PY_SSIZE_T_MAX) { + if (size > INT_MAX) { PyErr_Format(PyExc_OverflowError, "serialized '%s' too large to convert to bytes", name); return NULL; From f28e454b223816912bb9b5cbe47f49c591665240 Mon Sep 17 00:00:00 2001 From: neonene <53406459+neonene@users.noreply.github.com> Date: Fri, 3 Jun 2022 14:45:42 +0900 Subject: [PATCH 5/8] correct NEWS --- .../next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst index bd4d94696c9e73..2010200e0110e2 100644 --- a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst +++ b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst @@ -1,2 +1,2 @@ :meth:`sqlite3.Connection.serialize` now raises :exc:`OverflowError` on 32-bit -platforms if the serialized database exceeds ``Py_SSIZE_T_MAX`` bytes. +platforms if the serialized database exceeds ``INT_MAX`` bytes. From 49a0f64097bcfcc35e86c0fc6f958583739fb88c Mon Sep 17 00:00:00 2001 From: neonene <53406459+neonene@users.noreply.github.com> Date: Fri, 3 Jun 2022 21:07:26 +0900 Subject: [PATCH 6/8] Remove OverflowError --- Modules/_sqlite/connection.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index f7b8995448bc7b..959683a5a5e424 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2092,11 +2092,7 @@ serialize_impl(pysqlite_Connection *self, const char *name) return NULL; } #if PY_SSIZE_T_MAX < 9223372036854775807 - if (size > INT_MAX) { - PyErr_Format(PyExc_OverflowError, - "serialized '%s' too large to convert to bytes", name); - return NULL; - } + size = Py_MIN(size, INT_MAX); #endif PyObject *res = PyBytes_FromStringAndSize(data, (Py_ssize_t)size); if (!(flags & SQLITE_SERIALIZE_NOCOPY)) { From 3261f0c9c5ce0677856aada669be6385a5a23b22 Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Fri, 10 Jun 2022 09:41:06 +0200 Subject: [PATCH 7/8] Update Modules/_sqlite/connection.c --- Modules/_sqlite/connection.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index 959683a5a5e424..4ac0078eb83c21 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -2091,9 +2091,6 @@ serialize_impl(pysqlite_Connection *self, const char *name) name); return NULL; } -#if PY_SSIZE_T_MAX < 9223372036854775807 - size = Py_MIN(size, INT_MAX); -#endif PyObject *res = PyBytes_FromStringAndSize(data, (Py_ssize_t)size); if (!(flags & SQLITE_SERIALIZE_NOCOPY)) { sqlite3_free((void *)data); From a158fcd9b58cd3d45a9f7bba7a87e4d55550154e Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Fri, 10 Jun 2022 09:41:52 +0200 Subject: [PATCH 8/8] Delete 2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst --- .../next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst diff --git a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst b/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst deleted file mode 100644 index 2010200e0110e2..00000000000000 --- a/Misc/NEWS.d/next/Library/2022-05-25-04-48-30.gh-issue-92434.ZCv8o0.rst +++ /dev/null @@ -1,2 +0,0 @@ -:meth:`sqlite3.Connection.serialize` now raises :exc:`OverflowError` on 32-bit -platforms if the serialized database exceeds ``INT_MAX`` bytes.