Issue #16475 : Correctly handle the EOF when reading marshal streams.
diff --git a/Python/marshal.c b/Python/marshal.c
index 4e55296..bd88939 100644
--- a/Python/marshal.c
+++ b/Python/marshal.c
@@ -808,10 +808,16 @@
     PyObject *v, *v2;
     Py_ssize_t idx = 0;
     long i, n;
-    int type = r_byte(p);
+    int type, code = r_byte(p);
     int flag;
     PyObject *retval;
 
+    if (code == EOF) {
+        PyErr_SetString(PyExc_EOFError,
+                        "EOF read where object expected");
+        return NULL;
+    }
+
     p->depth++;
 
     if (p->depth > MAX_MARSHAL_STACK_DEPTH) {
@@ -820,8 +826,8 @@
         return NULL;
     }
 
-    flag = type & FLAG_REF;
-    type = type & ~FLAG_REF;
+    flag = code & FLAG_REF;
+    type = code & ~FLAG_REF;
 
 #define R_REF(O) do{\
     if (flag) \
@@ -830,12 +836,6 @@
 
     switch (type) {
 
-    case EOF:
-        PyErr_SetString(PyExc_EOFError,
-                        "EOF read where object expected");
-        retval = NULL;
-        break;
-
     case TYPE_NULL:
         retval = NULL;
         break;