diff --git a/Python/modsupport.c b/Python/modsupport.c
index 68e1fa4..3d90ede 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -696,11 +696,23 @@
 int 
 PyModule_AddIntConstant(PyObject *m, const char *name, long value)
 {
-	return PyModule_AddObject(m, name, PyLong_FromLong(value));
+	PyObject *o = PyLong_FromLong(value);
+	if (!o)
+		return -1;
+	if (PyModule_AddObject(m, name, o) == 0)
+		return 0;
+	Py_DECREF(o);
+	return -1;
 }
 
 int 
 PyModule_AddStringConstant(PyObject *m, const char *name, const char *value)
 {
-	return PyModule_AddObject(m, name, PyUnicode_FromString(value));
+	PyObject *o = PyUnicode_FromString(value);
+	if (!o)
+		return -1;
+	if (PyModule_AddObject(m, name, o) == 0)
+		return 0;
+	Py_DECREF(o);
+	return -1;
 }
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
index cf23051..c26111a 100644
--- a/Python/mystrtoul.c
+++ b/Python/mystrtoul.c
@@ -116,12 +116,30 @@
 		if (*str == '0') {
 			++str;
 			if (*str == 'x' || *str == 'X') {
+				/* there must be at least one digit after 0x */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
 				base = 16;
 			} else if (*str == 'o' || *str == 'O') {
+				/* there must be at least one digit after 0o */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
 				base = 8;
 			} else if (*str == 'b' || *str == 'B') {
+				/* there must be at least one digit after 0b */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
 				base = 2;
 			} else {
@@ -143,22 +161,43 @@
 	case 16:
 		if (*str == '0') {
 			++str;
-			if (*str == 'x' || *str == 'X')
+			if (*str == 'x' || *str == 'X') {
+				/* there must be at least one digit after 0x */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 16) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
+			}
 		}
 		break;
 	case 8:
 		if (*str == '0') {
 			++str;
-			if (*str == 'o' || *str == 'O')
+			if (*str == 'o' || *str == 'O') {
+				/* there must be at least one digit after 0o */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 8) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
+			}
 		}
 		break;
 	case 2:
 		if(*str == '0') {
 			++str;
-			if (*str == 'b' || *str == 'B')
+			if (*str == 'b' || *str == 'B') {
+				/* there must be at least one digit after 0b */
+				if (_PyLong_DigitValue[Py_CHARMASK(str[1])] >= 2) {
+					if (ptr)
+						*ptr = str;
+					return 0;
+				}
 				++str;
+			}
 		}
 		break;
 	}
