Commits

Lenard Lindstrom  committed b83d8cc

Apply overlooked issue #109 changes to color.c

The Py_ssize_t oriented "n" format adds the possibility of an OverflowError
being thrown. For backwards compatibility, the OverflowError exception is
intercepted and replaced with a ValueError.

  • Participants
  • Parent commits fb1a302

Comments (0)

Files changed (1)

 {
     Py_ssize_t clength;
 
-    if (!PyArg_ParseTuple (args, "k", &clength))
-        return NULL;
+#if PY_VERSION_HEX < 0x02050000
+#define FORMAT_STRING "k"
+#else
+#define FORMAT_STRING "n"
+#endif
+
+    if (!PyArg_ParseTuple (args, FORMAT_STRING, &clength)) {
+        if (!PyErr_ExceptionMatches(PyExc_OverflowError)) {
+            return NULL;
+        }
+        /* OverflowError also means the value is out-of-range */
+        PyErr_Clear();
+        clength = PY_SSIZE_T_MAX;
+    }
 
     if (clength > 4 || clength < 1) {
         return RAISE (PyExc_ValueError, "Length needs to be 1,2,3, or 4.");
     color->len = clength;
 
     Py_RETURN_NONE;
+
+#undef FORMAT_STRING
 }