[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