From: Georg Brandl Date: Sat, 19 Jul 2008 12:39:10 +0000 (+0000) Subject: #3302: fix segfaults when passing None for arguments that can't X-Git-Tag: v2.6b3~276 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6b41a8e156d7c38947a082016ffb58de8d2485ce;p=python #3302: fix segfaults when passing None for arguments that can't be NULL for the C functions. --- diff --git a/Misc/NEWS b/Misc/NEWS index 1ec7695143..2226e8af2b 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -67,6 +67,9 @@ Core and Builtins 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 configuration files. diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 09e04efc91..09c025fe96 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -586,7 +586,7 @@ static PyObject* PyIntl_gettext(PyObject* self, PyObject *args) { char *in; - if (!PyArg_ParseTuple(args, "z", &in)) + if (!PyArg_ParseTuple(args, "s", &in)) return 0; return PyString_FromString(gettext(in)); } @@ -599,7 +599,7 @@ static PyObject* PyIntl_dgettext(PyObject* self, PyObject *args) { char *domain, *in; - if (!PyArg_ParseTuple(args, "zz", &domain, &in)) + if (!PyArg_ParseTuple(args, "zs", &domain, &in)) return 0; return PyString_FromString(dgettext(domain, in)); } @@ -613,7 +613,7 @@ PyIntl_dcgettext(PyObject *self, PyObject *args) { char *domain, *msgid; int category; - if (!PyArg_ParseTuple(args, "zzi", &domain, &msgid, &category)) + if (!PyArg_ParseTuple(args, "zsi", &domain, &msgid, &category)) return 0; return PyString_FromString(dcgettext(domain,msgid,category)); } @@ -643,9 +643,13 @@ PyDoc_STRVAR(bindtextdomain__doc__, static PyObject* PyIntl_bindtextdomain(PyObject* self,PyObject*args) { - char *domain,*dirname; - if (!PyArg_ParseTuple(args, "zz", &domain, &dirname)) + char *domain, *dirname; + if (!PyArg_ParseTuple(args, "sz", &domain, &dirname)) return 0; + if (!strlen(domain)) { + PyErr_SetString(Error, "domain must be a non-empty string"); + return 0; + } dirname = bindtextdomain(domain, dirname); if (!dirname) { PyErr_SetFromErrno(PyExc_OSError);