[Python-checkins] python/dist/src/Python import.c, 2.228,
2.229 marshal.c, 1.75, 1.76
arigo at users.sourceforge.net
arigo at users.sourceforge.net
Fri Mar 26 10:09:29 EST 2004
Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv16157/Python
Modified Files:
import.c marshal.c
Log Message:
Marshal clean-up (SF patch #873224)
Index: import.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/import.c,v
retrieving revision 2.228
retrieving revision 2.229
diff -C2 -d -r2.228 -r2.229
*** import.c 24 Mar 2004 22:22:12 -0000 2.228
--- import.c 26 Mar 2004 15:09:27 -0000 2.229
***************
*** 707,716 ****
co = PyMarshal_ReadLastObjectFromFile(fp);
! /* Ugly: rd_object() may return NULL with or without error */
! if (co == NULL || !PyCode_Check(co)) {
! if (!PyErr_Occurred())
! PyErr_Format(PyExc_ImportError,
! "Non-code object in %.200s", cpathname);
! Py_XDECREF(co);
return NULL;
}
--- 707,716 ----
co = PyMarshal_ReadLastObjectFromFile(fp);
! if (co == NULL)
! return NULL;
! if (!PyCode_Check(co)) {
! PyErr_Format(PyExc_ImportError,
! "Non-code object in %.200s", cpathname);
! Py_DECREF(co);
return NULL;
}
***************
*** 820,824 ****
PyMarshal_WriteLongToFile(0L, fp);
PyMarshal_WriteObjectToFile((PyObject *)co, fp);
! if (ferror(fp)) {
if (Py_VerboseFlag)
PySys_WriteStderr("# can't write %s\n", cpathname);
--- 820,824 ----
PyMarshal_WriteLongToFile(0L, fp);
PyMarshal_WriteObjectToFile((PyObject *)co, fp);
! if (fflush(fp) != 0 || ferror(fp)) {
if (Py_VerboseFlag)
PySys_WriteStderr("# can't write %s\n", cpathname);
Index: marshal.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/marshal.c,v
retrieving revision 1.75
retrieving revision 1.76
diff -C2 -d -r1.75 -r1.76
*** marshal.c 4 Sep 2003 11:59:50 -0000 1.75
--- marshal.c 26 Mar 2004 15:09:27 -0000 1.76
***************
*** 381,384 ****
--- 381,386 ----
r_object(RFILE *p)
{
+ /* NULL is a valid return value, it does not necessarily means that
+ an exception is set. */
PyObject *v, *v2;
long i, n;
***************
*** 431,436 ****
return NULL;
ob->ob_size = n;
! for (i = 0; i < size; i++)
! ob->ob_digit[i] = r_short(p);
return (PyObject *)ob;
}
--- 433,446 ----
return NULL;
ob->ob_size = n;
! for (i = 0; i < size; i++) {
! int digit = r_short(p);
! if (digit < 0) {
! Py_DECREF(ob);
! PyErr_SetString(PyExc_ValueError,
! "bad marshal data");
! return NULL;
! }
! ob->ob_digit[i] = digit;
! }
return (PyObject *)ob;
}
***************
*** 441,445 ****
double dx;
n = r_byte(p);
! if (r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
--- 451,455 ----
double dx;
n = r_byte(p);
! if (n == EOF || r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
***************
*** 459,463 ****
Py_complex c;
n = r_byte(p);
! if (r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
--- 469,473 ----
Py_complex c;
n = r_byte(p);
! if (n == EOF || r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
***************
*** 469,473 ****
PyFPE_END_PROTECT(c)
n = r_byte(p);
! if (r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
--- 479,483 ----
PyFPE_END_PROTECT(c)
n = r_byte(p);
! if (n == EOF || r_string(buf, (int)n, p) != n) {
PyErr_SetString(PyExc_EOFError,
"EOF read where object expected");
***************
*** 536,539 ****
--- 546,552 ----
v2 = r_object(p);
if ( v2 == NULL ) {
+ if (!PyErr_Occurred())
+ PyErr_SetString(PyExc_TypeError,
+ "NULL object in marshal data");
Py_DECREF(v);
v = NULL;
***************
*** 556,559 ****
--- 569,575 ----
v2 = r_object(p);
if ( v2 == NULL ) {
+ if (!PyErr_Occurred())
+ PyErr_SetString(PyExc_TypeError,
+ "NULL object in marshal data");
Py_DECREF(v);
v = NULL;
***************
*** 572,576 ****
key = r_object(p);
if (key == NULL)
! break; /* XXX Assume TYPE_NULL, not an error */
val = r_object(p);
if (val != NULL)
--- 588,592 ----
key = r_object(p);
if (key == NULL)
! break;
val = r_object(p);
if (val != NULL)
***************
*** 579,582 ****
--- 595,602 ----
Py_XDECREF(val);
}
+ if (PyErr_Occurred()) {
+ Py_DECREF(v);
+ v = NULL;
+ }
return v;
***************
*** 593,619 ****
int stacksize = r_long(p);
int flags = r_long(p);
! PyObject *code = NULL;
! PyObject *consts = NULL;
! PyObject *names = NULL;
! PyObject *varnames = NULL;
! PyObject *freevars = NULL;
! PyObject *cellvars = NULL;
! PyObject *filename = NULL;
! PyObject *name = NULL;
! int firstlineno = 0;
! PyObject *lnotab = NULL;
!
! code = r_object(p);
! if (code) consts = r_object(p);
! if (consts) names = r_object(p);
! if (names) varnames = r_object(p);
! if (varnames) freevars = r_object(p);
! if (freevars) cellvars = r_object(p);
! if (cellvars) filename = r_object(p);
! if (filename) name = r_object(p);
! if (name) {
! firstlineno = r_long(p);
! lnotab = r_object(p);
! }
if (!PyErr_Occurred()) {
--- 613,626 ----
int stacksize = r_long(p);
int flags = r_long(p);
! PyObject *code = r_object(p);
! PyObject *consts = r_object(p);
! PyObject *names = r_object(p);
! PyObject *varnames = r_object(p);
! PyObject *freevars = r_object(p);
! PyObject *cellvars = r_object(p);
! PyObject *filename = r_object(p);
! PyObject *name = r_object(p);
! int firstlineno = r_long(p);
! PyObject *lnotab = r_object(p);
if (!PyErr_Occurred()) {
***************
*** 648,651 ****
--- 655,672 ----
}
+ PyObject *
+ read_object(RFILE *p)
+ {
+ PyObject *v;
+ if (PyErr_Occurred()) {
+ fprintf(stderr, "XXX readobject called with exception set\n");
+ return NULL;
+ }
+ v = r_object(p);
+ if (v == NULL && !PyErr_Occurred())
+ PyErr_SetString(PyExc_TypeError, "NULL object in marshal data");
+ return v;
+ }
+
int
PyMarshal_ReadShortFromFile(FILE *fp)
***************
*** 694,701 ****
off_t filesize;
#endif
- if (PyErr_Occurred()) {
- fprintf(stderr, "XXX rd_object called with exception set\n");
- return NULL;
- }
#ifdef HAVE_FSTAT
filesize = getfilesize(fp);
--- 715,718 ----
***************
*** 731,740 ****
{
RFILE rf;
- if (PyErr_Occurred()) {
- fprintf(stderr, "XXX rd_object called with exception set\n");
- return NULL;
- }
rf.fp = fp;
! return r_object(&rf);
}
--- 748,753 ----
{
RFILE rf;
rf.fp = fp;
! return read_object(&rf);
}
***************
*** 743,755 ****
{
RFILE rf;
- if (PyErr_Occurred()) {
- fprintf(stderr, "XXX rds_object called with exception set\n");
- return NULL;
- }
rf.fp = NULL;
- rf.str = NULL;
rf.ptr = str;
rf.end = str + len;
! return r_object(&rf);
}
--- 756,763 ----
{
RFILE rf;
rf.fp = NULL;
rf.ptr = str;
rf.end = str + len;
! return read_object(&rf);
}
***************
*** 817,821 ****
RFILE rf;
PyObject *f;
- PyObject *v;
if (!PyArg_ParseTuple(args, "O:load", &f))
return NULL;
--- 825,828 ----
***************
*** 826,838 ****
}
rf.fp = PyFile_AsFile(f);
! rf.str = NULL;
! rf.ptr = rf.end = NULL;
! PyErr_Clear();
! v = r_object(&rf);
! if (PyErr_Occurred()) {
! Py_XDECREF(v);
! v = NULL;
! }
! return v;
}
--- 833,837 ----
}
rf.fp = PyFile_AsFile(f);
! return read_object(&rf);
}
***************
*** 850,854 ****
{
RFILE rf;
- PyObject *v;
char *s;
int n;
--- 849,852 ----
***************
*** 856,869 ****
return NULL;
rf.fp = NULL;
- rf.str = args;
rf.ptr = s;
rf.end = s + n;
! PyErr_Clear();
! v = r_object(&rf);
! if (PyErr_Occurred()) {
! Py_XDECREF(v);
! v = NULL;
! }
! return v;
}
--- 854,860 ----
return NULL;
rf.fp = NULL;
rf.ptr = s;
rf.end = s + n;
! return read_object(&rf);
}
More information about the Python-checkins
mailing list