]> granicus.if.org Git - python/commitdiff
#3302: fix segfaults when passing None for arguments that can't
authorGeorg Brandl <georg@python.org>
Sat, 19 Jul 2008 12:39:10 +0000 (12:39 +0000)
committerGeorg Brandl <georg@python.org>
Sat, 19 Jul 2008 12:39:10 +0000 (12:39 +0000)
be NULL for the C functions.

Misc/NEWS
Modules/_localemodule.c

index 1ec76951435334ab29db15d5cce8e8975225e6ff..2226e8af2bdb2492a90c13ddcfd0e693a99c9964 100644 (file)
--- 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.
 
index 09e04efc91d9faafae9ceb219450205d11b35cb4..09c025fe96cc7e7128442e411840e3252d5c80e5 100644 (file)
@@ -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);