diff options
-rw-r--r-- | www-apache/mod_wsgi/files/mod_wsgi-4.7.1-py310.patch | 126 | ||||
-rw-r--r-- | www-apache/mod_wsgi/mod_wsgi-4.7.1-r1.ebuild | 6 |
2 files changed, 131 insertions, 1 deletions
diff --git a/www-apache/mod_wsgi/files/mod_wsgi-4.7.1-py310.patch b/www-apache/mod_wsgi/files/mod_wsgi-4.7.1-py310.patch new file mode 100644 index 000000000000..274046d99ca0 --- /dev/null +++ b/www-apache/mod_wsgi/files/mod_wsgi-4.7.1-py310.patch @@ -0,0 +1,126 @@ +From b439f1c411a9479ccc03c16465cdff50fede79d3 Mon Sep 17 00:00:00 2001 +From: Petr Viktorin <encukou@gmail.com> +Date: Thu, 10 Jun 2021 15:45:03 +0200 +Subject: [PATCH] Use Py_CompileString rather than + PyParser_SimpleParseFile/PyNode_Compile +From: https://github.com/GrahamDumpleton/mod_wsgi/commit/b439f1c411a9479ccc03c16465cdff50fede79d3 + +--- + src/server/mod_wsgi.c | 68 +++++++++++++++++++++++++++++++--------- + src/server/wsgi_python.h | 1 - + 2 files changed, 53 insertions(+), 16 deletions(-) + +diff --git a/src/server/mod_wsgi.c b/src/server/mod_wsgi.c +index b657a748..4f1d8765 100644 +--- a/src/server/mod_wsgi.c ++++ b/src/server/mod_wsgi.c +@@ -3645,7 +3645,10 @@ static PyObject *wsgi_load_source(apr_pool_t *pool, request_rec *r, + FILE *fp = NULL; + PyObject *m = NULL; + PyObject *co = NULL; +- struct _node *n = NULL; ++ char *source; ++ size_t pos = 0; ++ size_t allocated = 1024; ++ size_t nread; + + #if defined(WIN32) && defined(APR_HAS_UNICODE_FS) + apr_wchar_t wfilename[APR_PATH_MAX]; +@@ -3730,36 +3733,71 @@ static PyObject *wsgi_load_source(apr_pool_t *pool, request_rec *r, + return NULL; + } + +- n = PyParser_SimpleParseFile(fp, filename, Py_file_input); +- ++ source = malloc(allocated); ++ if (source != NULL) { ++ do { ++ nread = fread(source + pos, 1, allocated - pos, fp); ++ pos += nread; ++ if (nread == 0) { ++ if (ferror(fp)) { ++ free(source); ++ source = NULL; ++ } ++ break; ++ } ++ if (pos == allocated) { ++ allocated *= 2; ++ char *reallocated_source = realloc(source, allocated); ++ if (reallocated_source == NULL) { ++ free(source); ++ source = NULL; ++ break; ++ } ++ source = reallocated_source; ++ } ++ } while (!feof(fp)); ++ } + fclose(fp); +- +- if (!n) { ++ if (source == NULL) { + Py_BEGIN_ALLOW_THREADS + if (r) { +- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, + "mod_wsgi (pid=%d, process='%s', application='%s'): " +- "Failed to parse Python script file '%s'.", getpid(), ++ "Could not read source file '%s'.", getpid(), + process_group, application_group, filename); + } + else { +- ap_log_error(APLOG_MARK, APLOG_ERR, 0, wsgi_server, ++ ap_log_error(APLOG_MARK, APLOG_ERR, errno, wsgi_server, + "mod_wsgi (pid=%d, process='%s', application='%s'): " +- "Failed to parse Python script file '%s'.", getpid(), ++ "Could not read source file '%s'.", getpid(), + process_group, application_group, filename); + } + Py_END_ALLOW_THREADS ++ return NULL; ++ } + +- wsgi_log_python_error(r, NULL, filename, 0); ++ co = Py_CompileString(filename, source, 0); ++ free(source); + ++ if (!co) { ++ Py_BEGIN_ALLOW_THREADS ++ if (r) { ++ ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r, ++ "mod_wsgi (pid=%d, process='%s', application='%s'): " ++ "Could not compile source file '%s'.", getpid(), ++ process_group, application_group, filename); ++ } ++ else { ++ ap_log_error(APLOG_MARK, APLOG_ERR, errno, wsgi_server, ++ "mod_wsgi (pid=%d, process='%s', application='%s'): " ++ "Could not compile source file '%s'.", getpid(), ++ process_group, application_group, filename); ++ } ++ Py_END_ALLOW_THREADS + return NULL; + } + +- co = (PyObject *)PyNode_Compile(n, filename); +- PyNode_Free(n); +- +- if (co) +- m = PyImport_ExecCodeModuleEx((char *)name, co, (char *)filename); ++ m = PyImport_ExecCodeModuleEx((char *)name, co, (char *)filename); + + Py_XDECREF(co); + +diff --git a/src/server/wsgi_python.h b/src/server/wsgi_python.h +index fa06e2cb..3b34b731 100644 +--- a/src/server/wsgi_python.h ++++ b/src/server/wsgi_python.h +@@ -43,7 +43,6 @@ + + #include "structmember.h" + #include "compile.h" +-#include "node.h" + #include "osdefs.h" + #include "frameobject.h" + diff --git a/www-apache/mod_wsgi/mod_wsgi-4.7.1-r1.ebuild b/www-apache/mod_wsgi/mod_wsgi-4.7.1-r1.ebuild index e5ae886e528e..759f60c5f6d0 100644 --- a/www-apache/mod_wsgi/mod_wsgi-4.7.1-r1.ebuild +++ b/www-apache/mod_wsgi/mod_wsgi-4.7.1-r1.ebuild @@ -3,7 +3,7 @@ EAPI=6 -PYTHON_COMPAT=( python3_{6,7,8,9} ) +PYTHON_COMPAT=( python3_{8..10} ) PYTHON_REQ_USE="threads(+)" inherit apache-module python-single-r1 @@ -27,6 +27,10 @@ APACHE2_MOD_FILE="${S}/src/server/.libs/${PN}.so" DOCFILES="README.rst" +PATCHES=( + "${FILESDIR}/${P}-py310.patch" +) + need_apache2 pkg_setup() { |