[Python-checkins] r65133 - in python/trunk: Misc/NEWS Modules/_localemodule.c
georg.brandl
python-checkins at python.org
Sat Jul 19 14:39:11 CEST 2008
Author: georg.brandl
Date: Sat Jul 19 14:39:10 2008
New Revision: 65133
Log:
#3302: fix segfaults when passing None for arguments that can't
be NULL for the C functions.
Modified:
python/trunk/Misc/NEWS
python/trunk/Modules/_localemodule.c
Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS (original)
+++ python/trunk/Misc/NEWS Sat Jul 19 14:39:10 2008
@@ -67,6 +67,9 @@
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.
Modified: python/trunk/Modules/_localemodule.c
==============================================================================
--- python/trunk/Modules/_localemodule.c (original)
+++ python/trunk/Modules/_localemodule.c Sat Jul 19 14:39:10 2008
@@ -586,7 +586,7 @@
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 @@
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 @@
{
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 @@
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);
More information about the Python-checkins
mailing list