Skip to content

Commit 9e19ca4

Browse files
author
Victor Stinner
committed
locale.bindtextdomain(): use PyUnicode_FSConverter() to parse the filename
1 parent c629d51 commit 9e19ca4

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

Modules/_localemodule.c

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -572,19 +572,31 @@ PyDoc_STRVAR(bindtextdomain__doc__,
572572
static PyObject*
573573
PyIntl_bindtextdomain(PyObject* self,PyObject*args)
574574
{
575-
char *domain, *dirname;
576-
if (!PyArg_ParseTuple(args, "sz", &domain, &dirname))
575+
char *domain, *dirname, *current_dirname;
576+
PyObject *dirname_obj, *dirname_bytes = NULL, *result;
577+
if (!PyArg_ParseTuple(args, "sO", &domain, &dirname_obj))
577578
return 0;
578579
if (!strlen(domain)) {
579580
PyErr_SetString(Error, "domain must be a non-empty string");
580581
return 0;
581582
}
582-
dirname = bindtextdomain(domain, dirname);
583-
if (!dirname) {
583+
if (dirname_obj != Py_None) {
584+
if (!PyUnicode_FSConverter(dirname_obj, &dirname_bytes))
585+
return NULL;
586+
dirname = PyBytes_AsString(dirname_bytes);
587+
} else {
588+
dirname_bytes = NULL;
589+
dirname = NULL;
590+
}
591+
current_dirname = bindtextdomain(domain, dirname);
592+
if (current_dirname == NULL) {
593+
Py_XDECREF(dirname_bytes);
584594
PyErr_SetFromErrno(PyExc_OSError);
585595
return NULL;
586596
}
587-
return str2uni(dirname);
597+
result = str2uni(current_dirname);
598+
Py_XDECREF(dirname_bytes);
599+
return result;
588600
}
589601

590602
#ifdef HAVE_BIND_TEXTDOMAIN_CODESET

0 commit comments

Comments
 (0)