diff --git a/238.patch b/238.patch new file mode 100644 index 0000000..2fb1979 --- /dev/null +++ b/238.patch @@ -0,0 +1,75 @@ +From a7b3035175488cd26791cd7f935eb1ed03de304a Mon Sep 17 00:00:00 2001 +From: "Victor M. Alvarez" +Date: Wed, 2 Aug 2023 14:42:32 +0200 +Subject: [PATCH] Fix segfault in Python 3.12b4 + +In `flo_read` and `flo_write` there were calls to `Py_DECREF` after releasing the GIL. + +Closes #237 +--- + yara-python.c | 34 ++++++++++++++++------------------ + 1 file changed, 16 insertions(+), 18 deletions(-) + +diff --git a/yara-python.c b/yara-python.c +index 1d851b9..714317c 100644 +--- a/yara-python.c ++++ b/yara-python.c +@@ -1394,29 +1394,28 @@ static size_t flo_read( + PyObject* bytes = PyObject_CallMethod( + (PyObject*) user_data, "read", "n", (Py_ssize_t) size); + +- PyGILState_Release(gil_state); +- +- if (bytes != NULL) ++ if (bytes == NULL) + { +- Py_ssize_t len; +- char* buffer; +- +- int result = PyBytes_AsStringAndSize(bytes, &buffer, &len); ++ PyGILState_Release(gil_state); ++ return i; ++ } + +- if (result == -1 || (size_t) len < size) +- { +- Py_DECREF(bytes); +- return i; +- } ++ Py_ssize_t len; ++ char* buffer; + +- memcpy((char*) ptr + i * size, buffer, size); ++ int result = PyBytes_AsStringAndSize(bytes, &buffer, &len); + +- Py_DECREF(bytes); +- } +- else ++ if (result == -1 || (size_t) len < size) + { ++ Py_DECREF(bytes); ++ PyGILState_Release(gil_state); + return i; + } ++ ++ memcpy((char*) ptr + i * size, buffer, size); ++ ++ Py_DECREF(bytes); ++ PyGILState_Release(gil_state); + } + + return count; +@@ -1444,12 +1443,11 @@ static size_t flo_write( + (PyObject*) user_data, "write", "s#", (char*) ptr + i * size, size); + #endif + ++ Py_XDECREF(result); + PyGILState_Release(gil_state); + + if (result == NULL) + return i; +- +- Py_DECREF(result); + } + + return count; diff --git a/python-yara.spec b/python-yara.spec index 64e1955..47d9575 100644 --- a/python-yara.spec +++ b/python-yara.spec @@ -1,6 +1,6 @@ Name: python-yara Version: 4.3.1 -%global baserelease 3 +%global baserelease 4 Summary: Python binding for the YARA pattern matching tool License: Apache-2.0 URL: https://github.com/VirusTotal/yara-python/ @@ -40,6 +40,9 @@ Release: %{baserelease}.%{gitdate}git%{shortcommit}%{?dist} Source0: https://github.com/%{gituser}/%{gitname}/archive/%{commit}/%{name}-%{version}-%{shortcommit}.tar.gz#/%{name}-%{version}-git%{gitdate}-%{shortcommit}.tar.gz %endif +# https://github.com/VirusTotal/yara-python/pull/238 +Patch0: 238.patch + BuildRequires: gcc BuildRequires: pkgconfig(yara) BuildRequires: libtool @@ -150,6 +153,9 @@ pytest-3 -k "$EXCLUDE" tests.py -v #==================================================================== %changelog +* Fri Aug 25 2023 Mikel Olasagasti Uranga - 4.3.1-4 +- Fix rhbz#2226378 rhbz#2220571 + * Fri Jul 21 2023 Fedora Release Engineering - 4.3.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild