Kaydet (Commit) 6b41a8e1 authored tarafından Georg Brandl's avatar Georg Brandl

#3302: fix segfaults when passing None for arguments that can't

be NULL for the C functions.
üst 1ad108db
...@@ -67,6 +67,9 @@ Core and Builtins ...@@ -67,6 +67,9 @@ Core and Builtins
Library Library
------- -------
- Issue #3302: Fix several crashes when calling locale's gettext functions
with None arguments.
- Issue #3389: Allow resolving dotted names for handlers in logging - Issue #3389: Allow resolving dotted names for handlers in logging
configuration files. configuration files.
......
...@@ -586,7 +586,7 @@ static PyObject* ...@@ -586,7 +586,7 @@ static PyObject*
PyIntl_gettext(PyObject* self, PyObject *args) PyIntl_gettext(PyObject* self, PyObject *args)
{ {
char *in; char *in;
if (!PyArg_ParseTuple(args, "z", &in)) if (!PyArg_ParseTuple(args, "s", &in))
return 0; return 0;
return PyString_FromString(gettext(in)); return PyString_FromString(gettext(in));
} }
...@@ -599,7 +599,7 @@ static PyObject* ...@@ -599,7 +599,7 @@ static PyObject*
PyIntl_dgettext(PyObject* self, PyObject *args) PyIntl_dgettext(PyObject* self, PyObject *args)
{ {
char *domain, *in; char *domain, *in;
if (!PyArg_ParseTuple(args, "zz", &domain, &in)) if (!PyArg_ParseTuple(args, "zs", &domain, &in))
return 0; return 0;
return PyString_FromString(dgettext(domain, in)); return PyString_FromString(dgettext(domain, in));
} }
...@@ -613,7 +613,7 @@ PyIntl_dcgettext(PyObject *self, PyObject *args) ...@@ -613,7 +613,7 @@ PyIntl_dcgettext(PyObject *self, PyObject *args)
{ {
char *domain, *msgid; char *domain, *msgid;
int category; int category;
if (!PyArg_ParseTuple(args, "zzi", &domain, &msgid, &category)) if (!PyArg_ParseTuple(args, "zsi", &domain, &msgid, &category))
return 0; return 0;
return PyString_FromString(dcgettext(domain,msgid,category)); return PyString_FromString(dcgettext(domain,msgid,category));
} }
...@@ -643,9 +643,13 @@ PyDoc_STRVAR(bindtextdomain__doc__, ...@@ -643,9 +643,13 @@ PyDoc_STRVAR(bindtextdomain__doc__,
static PyObject* static PyObject*
PyIntl_bindtextdomain(PyObject* self,PyObject*args) PyIntl_bindtextdomain(PyObject* self,PyObject*args)
{ {
char *domain,*dirname; char *domain, *dirname;
if (!PyArg_ParseTuple(args, "zz", &domain, &dirname)) if (!PyArg_ParseTuple(args, "sz", &domain, &dirname))
return 0; return 0;
if (!strlen(domain)) {
PyErr_SetString(Error, "domain must be a non-empty string");
return 0;
}
dirname = bindtextdomain(domain, dirname); dirname = bindtextdomain(domain, dirname);
if (!dirname) { if (!dirname) {
PyErr_SetFromErrno(PyExc_OSError); PyErr_SetFromErrno(PyExc_OSError);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment