#14161: fix the __repr__ of file objects to escape the file name.

This commit is contained in:
Ezio Melotti 2012-03-12 01:17:02 +02:00
parent f60845b70a
commit 11f8b6872a
3 changed files with 19 additions and 4 deletions

View file

@ -635,10 +635,11 @@ file_dealloc(PyFileObject *f)
static PyObject *
file_repr(PyFileObject *f)
{
PyObject *ret = NULL;
PyObject *name = NULL;
if (PyUnicode_Check(f->f_name)) {
#ifdef Py_USING_UNICODE
PyObject *ret = NULL;
PyObject *name = PyUnicode_AsUnicodeEscapeString(f->f_name);
name = PyUnicode_AsUnicodeEscapeString(f->f_name);
const char *name_str = name ? PyString_AsString(name) : "?";
ret = PyString_FromFormat("<%s file u'%s', mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
@ -649,11 +650,16 @@ file_repr(PyFileObject *f)
return ret;
#endif
} else {
return PyString_FromFormat("<%s file '%s', mode '%s' at %p>",
name = PyObject_Repr(f->f_name);
if (name == NULL)
return NULL;
ret = PyString_FromFormat("<%s file %s, mode '%s' at %p>",
f->f_fp == NULL ? "closed" : "open",
PyString_AsString(f->f_name),
PyString_AsString(name),
PyString_AsString(f->f_mode),
f);
Py_XDECREF(name);
return ret;
}
}