Check for trailing backslash. Fixes #593656.
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 3dc7901..2294c3d 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -199,6 +199,7 @@
                     "'abc", # quote is not closed
                     "'abc\"", # open quote and close quote don't match
                     "'abc'   ?", # junk after close quote
+                    "'\\'", # trailing backslash
                     # some tests of the quoting rules
                     #"'abc\"\''",
                     #"'\\\\a\'\'\'\\\'\\\\\''",
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 19c2834..a21e021 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -546,6 +546,11 @@
 			continue;
 		}
 		s++;
+                if (s==end) {
+			PyErr_SetString(PyExc_ValueError,
+					"Trailing \\ in string");
+			goto failed;
+		}
 		switch (*s++) {
 		/* XXX This assumes ASCII! */
 		case '\n': break;
@@ -594,10 +599,9 @@
 				break;
 			}
 			if (!errors || strcmp(errors, "strict") == 0) {
-				Py_DECREF(v);
 				PyErr_SetString(PyExc_ValueError, 
 						"invalid \\x escape");
-				return NULL;
+				goto failed;
 			}
 			if (strcmp(errors, "replace") == 0) {
 				*p++ = '?';
@@ -608,18 +612,17 @@
 					     "decoding error; "
 					     "unknown error handling code: %.400s",
 					     errors);
-				return NULL;
+				goto failed;
 			}
 #ifndef Py_USING_UNICODE
 		case 'u':
 		case 'U':
 		case 'N':
 			if (unicode) {
-				Py_DECREF(v);
 				com_error(com, PyExc_ValueError,
 					  "Unicode escapes not legal "
 					  "when Unicode disabled");
-				return NULL;
+				goto failed;
 			}
 #endif
 		default: