summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/posixmodule.c9
2 files changed, 11 insertions, 1 deletions
diff --git a/Misc/NEWS b/Misc/NEWS
index 990f4d6..90e3cc1 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.3.1
Core and Builtins
-----------------
+- Issue #15965: Explicitly cast AT_FDCWD as (int). Required on Solaris 10
+ (which defines AT_FDCWD as 0xffd19553), harmless on other platforms.
+
- Issue #15926: Fix crash after multiple reinitializations of the interpreter.
- Issue #15895: Fix FILE pointer leak in one error branch of
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 54f6cd2..e0efebf 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -414,7 +414,14 @@ win32_warn_bytes_api()
#ifdef AT_FDCWD
-#define DEFAULT_DIR_FD AT_FDCWD
+/*
+ * Why the (int) cast? Solaris 10 defines AT_FDCWD as 0xffd19553 (-3041965);
+ * without the int cast, the value gets interpreted as uint (4291925331),
+ * which doesn't play nicely with all the initializer lines in this file that
+ * look like this:
+ * int dir_fd = DEFAULT_DIR_FD;
+ */
+#define DEFAULT_DIR_FD (int)AT_FDCWD
#else
#define DEFAULT_DIR_FD (-100)
#endif