From 5b2b6912f016bcc534c9c1e328be788ac80c7d7e Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 25 Apr 2024 08:00:42 +0300 Subject: [PATCH] gh-117968: Make the test for closed file more safe in the C API tests (GH-118230) The behavior of fileno() after fclose() is undefined, but it is the only practical way to check whether the file was closed. Only test this on the known platforms (Linux, Windows, macOS), where we already tested that it works. (cherry picked from commit 546cbcfa0eeeb533950bd49e30423f3d3bbd5ebe) Co-authored-by: Serhiy Storchaka --- Modules/_testcapi/run.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Modules/_testcapi/run.c b/Modules/_testcapi/run.c index baf728c2b632ad..16c7b756c38ba3 100644 --- a/Modules/_testcapi/run.c +++ b/Modules/_testcapi/run.c @@ -75,8 +75,10 @@ run_fileexflags(PyObject *mod, PyObject *pos_args) result = PyRun_FileExFlags(fp, filename, start, globals, locals, closeit, pflags); -#if !defined(__wasi__) - /* The behavior of fileno() after fclose() is undefined. */ +#if defined(__linux__) || defined(MS_WINDOWS) || defined(__APPLE__) + /* The behavior of fileno() after fclose() is undefined, but it is + * the only practical way to check whether the file was closed. + * Only test this on the known platforms. */ if (closeit && result && fileno(fp) >= 0) { PyErr_SetString(PyExc_AssertionError, "File was not closed after excution"); Py_DECREF(result);