Issue #6687: Moved the special-case for integers out of PyBytes_FromObject.
diff --git a/Objects/bytesobject.c b/Objects/bytesobject.c
index 41eee40..cb63448 100644
--- a/Objects/bytesobject.c
+++ b/Objects/bytesobject.c
@@ -2884,6 +2884,7 @@
 	const char *encoding = NULL;
 	const char *errors = NULL;
 	PyObject *new = NULL;
+	Py_ssize_t size;
 	static char *kwlist[] = {"source", "encoding", "errors", 0};
 
 	if (type != &PyBytes_Type)
@@ -2914,6 +2915,25 @@
 		assert(PyBytes_Check(new));
 		return new;
 	}
+	/* Is it an integer? */
+	size = PyNumber_AsSsize_t(x, PyExc_ValueError);
+	if (size == -1 && PyErr_Occurred()) {
+		PyErr_Clear();		
+	}
+	else {
+		if (size < 0) {
+			PyErr_SetString(PyExc_ValueError, "negative count");
+			return NULL;
+		}
+		new = PyBytes_FromStringAndSize(NULL, size);
+		if (new == NULL) {
+			return NULL;
+		}
+		if (size > 0) {
+			memset(((PyBytesObject*)new)->ob_sval, 0, size);
+		}
+		return new;
+	}
 
 	/* If it's not unicode, there can't be encoding or errors */
 	if (encoding != NULL || errors != NULL) {
@@ -2934,27 +2954,6 @@
 		PyErr_BadInternalCall();
 		return NULL;
 	}
-
-	/* Is it an int? */
-	size = PyNumber_AsSsize_t(x, PyExc_ValueError);
-	if (size == -1 && PyErr_Occurred()) {
-		PyErr_Clear();
-	}
-	else {
-		if (size < 0) {
-			PyErr_SetString(PyExc_ValueError, "negative count");
-			return NULL;
-		}
-		new = PyBytes_FromStringAndSize(NULL, size);
-		if (new == NULL) {
-			return NULL;
-		}
-		if (size > 0) {
-			memset(((PyBytesObject*)new)->ob_sval, 0, size);
-		}
-		return new;
-	}
-
 	/* Use the modern buffer interface */
 	if (PyObject_CheckBuffer(x)) {
 		Py_buffer view;
@@ -2974,6 +2973,11 @@
 		PyBuffer_Release(&view);
 		return NULL;
 	}
+	if (PyUnicode_Check(x)) {
+		PyErr_SetString(PyExc_TypeError,
+				"cannot convert unicode object to bytes");
+		return NULL;
+	}
 
 	/* For iterator version, create a string object and resize as needed */
 	/* XXX(gb): is 64 a good value? also, optimize if length is known */