From cb428f01625f99937b59431a53cc8f6013bd3cc2 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 27 Dec 2010 20:10:36 +0000 Subject: [PATCH] Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem encoding instead of UTF-8. --- Doc/c-api/exceptions.rst | 5 +++-- Include/warnings.h | 2 +- Misc/NEWS | 3 +++ Python/_warnings.c | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst index 9fec46f0c0e..24ca264ab6d 100644 --- a/Doc/c-api/exceptions.rst +++ b/Doc/c-api/exceptions.rst @@ -297,8 +297,9 @@ in various ways. There is a separate error indicator for each thread. is a straightforward wrapper around the Python function :func:`warnings.warn_explicit`, see there for more information. The *module* and *registry* arguments may be set to *NULL* to get the default effect - described there. *message*, *filename* and *module* are UTF-8 encoded - strings. + described there. *message* and *module* are UTF-8 encoded strings, + *filename* is decoded from the filesystem encoding + (:func:`sys.getfilesystemencoding`). .. c:function:: int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...) diff --git a/Include/warnings.h b/Include/warnings.h index 7553a25db63..b7db681cc41 100644 --- a/Include/warnings.h +++ b/Include/warnings.h @@ -20,7 +20,7 @@ PyAPI_FUNC(int) PyErr_WarnFormat( PyAPI_FUNC(int) PyErr_WarnExplicit( PyObject *category, const char *message, /* UTF-8 encoded string */ - const char *filename, /* UTF-8 encoded string */ + const char *filename, /* decoded from the filesystem encoding */ int lineno, const char *module, /* UTF-8 encoded string */ PyObject *registry); diff --git a/Misc/NEWS b/Misc/NEWS index 6c7cb466bb2..4fb23c3157c 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -8,6 +8,9 @@ What's New in Python 3.2 Release Candidate 1 Core and Builtins ----------------- +- Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem + encoding instead of UTF-8. + Library ------- diff --git a/Python/_warnings.c b/Python/_warnings.c index 87755e1edbc..51c39e48d4e 100644 --- a/Python/_warnings.c +++ b/Python/_warnings.c @@ -783,7 +783,7 @@ PyErr_WarnExplicit(PyObject *category, const char *text, { PyObject *res; PyObject *message = PyUnicode_FromString(text); - PyObject *filename = PyUnicode_FromString(filename_str); + PyObject *filename = PyUnicode_DecodeFSDefault(filename_str); PyObject *module = NULL; int ret = -1;