From 60bc809d9a80ec12530d224cc680bae42c4de285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Lemburg?= Date: Wed, 14 Jun 2000 09:18:32 +0000 Subject: [PATCH] Marc-Andre Lemburg : Added code so that .isXXX() testing returns 0 for emtpy strings. --- Objects/stringobject.c | 20 ++++++++++++++++++++ Objects/unicodeobject.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 5d754b0fbfb..a254019cb8e 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -1927,6 +1927,10 @@ string_isspace(PyStringObject *self, PyObject *args) isspace(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyString_GET_SIZE(self); for (; p < e; p++) { if (!isspace(*p)) @@ -1956,6 +1960,10 @@ string_isdigit(PyStringObject *self, PyObject *args) isdigit(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyString_GET_SIZE(self); for (; p < e; p++) { if (!isdigit(*p)) @@ -1985,6 +1993,10 @@ string_islower(PyStringObject *self, PyObject *args) if (PyString_GET_SIZE(self) == 1) return PyInt_FromLong(islower(*p) != 0); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyString_GET_SIZE(self); cased = 0; for (; p < e; p++) { @@ -2017,6 +2029,10 @@ string_isupper(PyStringObject *self, PyObject *args) if (PyString_GET_SIZE(self) == 1) return PyInt_FromLong(isupper(*p) != 0); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyString_GET_SIZE(self); cased = 0; for (; p < e; p++) { @@ -2050,6 +2066,10 @@ string_istitle(PyStringObject *self, PyObject *args) if (PyString_GET_SIZE(self) == 1) return PyInt_FromLong(isupper(*p) != 0); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyString_GET_SIZE(self); cased = 0; previous_is_cased = 0; diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c index eaa381bbf9f..bfc59dd97a1 100644 --- a/Objects/unicodeobject.c +++ b/Objects/unicodeobject.c @@ -3306,6 +3306,10 @@ unicode_islower(PyUnicodeObject *self, PyObject *args) if (PyUnicode_GET_SIZE(self) == 1) return PyInt_FromLong(Py_UNICODE_ISLOWER(*p) != 0); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); cased = 0; for (; p < e; p++) { @@ -3339,6 +3343,10 @@ unicode_isupper(PyUnicodeObject *self, PyObject *args) if (PyUnicode_GET_SIZE(self) == 1) return PyInt_FromLong(Py_UNICODE_ISUPPER(*p) != 0); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); cased = 0; for (; p < e; p++) { @@ -3374,6 +3382,10 @@ unicode_istitle(PyUnicodeObject *self, PyObject *args) return PyInt_FromLong((Py_UNICODE_ISTITLE(*p) != 0) || (Py_UNICODE_ISUPPER(*p) != 0)); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); cased = 0; previous_is_cased = 0; @@ -3418,6 +3430,10 @@ unicode_isspace(PyUnicodeObject *self, PyObject *args) Py_UNICODE_ISSPACE(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); for (; p < e; p++) { if (!Py_UNICODE_ISSPACE(*p)) @@ -3446,6 +3462,10 @@ unicode_isdecimal(PyUnicodeObject *self, PyObject *args) Py_UNICODE_ISDECIMAL(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); for (; p < e; p++) { if (!Py_UNICODE_ISDECIMAL(*p)) @@ -3474,6 +3494,10 @@ unicode_isdigit(PyUnicodeObject *self, PyObject *args) Py_UNICODE_ISDIGIT(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); for (; p < e; p++) { if (!Py_UNICODE_ISDIGIT(*p)) @@ -3502,6 +3526,10 @@ unicode_isnumeric(PyUnicodeObject *self, PyObject *args) Py_UNICODE_ISNUMERIC(*p)) return PyInt_FromLong(1); + /* Special case for empty strings */ + if (PyString_GET_SIZE(self) == 0) + return PyInt_FromLong(0); + e = p + PyUnicode_GET_SIZE(self); for (; p < e; p++) { if (!Py_UNICODE_ISNUMERIC(*p))