Fix the tests for various anomalies in the string-to-numbers
conversions.  Formerly, for example, int('-') would return 0 instead
of raising ValueError, and int(' 0') would raise ValueError
(complaining about a null byte!) instead of 0...
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 30f993b..086987e 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -67,12 +67,12 @@
 	s = PyString_AS_STRING(v);
 	while (*s && isspace(Py_CHARMASK(*s)))
 		s++;
-	if (s[0] == '\0') {
-		PyErr_SetString(PyExc_ValueError, "empty string for int()");
-		return NULL;
-	}
 	errno = 0;
 	x = PyOS_strtol(s, &end, 10);
+	if (end == s || !isdigit(end[-1])) {
+		PyErr_SetString(PyExc_ValueError, "no digits in int constant");
+		return NULL;
+	}
 	while (*end && isspace(Py_CHARMASK(*end)))
 		end++;
 	if (*end != '\0') {
@@ -80,7 +80,7 @@
 		PyErr_SetString(PyExc_ValueError, buffer);
 		return NULL;
 	}
-	else if (end-s != PyString_GET_SIZE(v)) {
+	else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
 		PyErr_SetString(PyExc_ValueError,
 				"null byte in argument for int()");
 		return NULL;
@@ -104,10 +104,6 @@
 	s = PyString_AS_STRING(v);
 	while (*s && isspace(Py_CHARMASK(*s)))
 		s++;
-	if (s[0] == '\0') {
-		PyErr_SetString(PyExc_ValueError, "empty string for long()");
-		return NULL;
-	}
 	x = PyLong_FromString(s, &end, 10);
 	if (x == NULL)
 		return NULL;
@@ -119,9 +115,9 @@
 		Py_DECREF(x);
 		return NULL;
 	}
-	else if (end-s != PyString_GET_SIZE(v)) {
+	else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
 		PyErr_SetString(PyExc_ValueError,
-				"null byte in argument for float()");
+				"null byte in argument for long()");
 		return NULL;
 	}
 	return x;
@@ -154,7 +150,7 @@
 		PyErr_SetString(PyExc_ValueError, buffer);
 		return NULL;
 	}
-	else if (end-s != PyString_GET_SIZE(v)) {
+	else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
 		PyErr_SetString(PyExc_ValueError,
 				"null byte in argument for float()");
 		return NULL;