[Python-checkins] CVS: python/dist/src/Modules bsddbmodule.c,1.25,1.26

A.M. Kuchling python-dev@python.org
Thu, 14 Dec 2000 16:59:34 -0800


Update of /cvsroot/python/python/dist/src/Modules
In directory slayer.i.sourceforge.net:/tmp/cvs-serv1941

Modified Files:
	bsddbmodule.c 
Log Message:
[Patch #102827] Fix for PR#119558, avoiding core dumps by checking for
malloc() returning NULL


Index: bsddbmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/bsddbmodule.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -r1.25 -r1.26
*** bsddbmodule.c	2000/09/01 23:29:26	1.25
--- bsddbmodule.c	2000/12/15 00:59:32	1.26
***************
*** 267,273 ****
  		if (drec.size > sizeof(buf)) data = malloc(drec.size);
  		else data = buf;
! 		memcpy(data,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
  	if (status != 0) {
  		if (status < 0)
--- 267,274 ----
  		if (drec.size > sizeof(buf)) data = malloc(drec.size);
  		else data = buf;
! 		if (data!=NULL) memcpy(data,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
+ 	if (data==NULL) return PyErr_NoMemory();
  	if (status != 0) {
  		if (status < 0)
***************
*** 388,394 ****
  		if (krec.size > sizeof(buf)) data = malloc(krec.size);
  		else data = buf;
! 		memcpy(data,krec.data,krec.size);
  	}
  	BSDDB_END_SAVE(dp)
  	while (status == 0) {
  		item = PyString_FromStringAndSize(data, (int)krec.size);
--- 389,396 ----
  		if (krec.size > sizeof(buf)) data = malloc(krec.size);
  		else data = buf;
! 		if (data!=NULL) memcpy(data,krec.data,krec.size);
  	}
  	BSDDB_END_SAVE(dp)
+ 	if (data==NULL) return PyErr_NoMemory();
  	while (status == 0) {
  		item = PyString_FromStringAndSize(data, (int)krec.size);
***************
*** 409,415 ****
  			if (krec.size > sizeof(buf)) data = malloc(krec.size);
  			else data = buf;
! 			memcpy(data,krec.data,krec.size);
  		}
  		BSDDB_END_SAVE(dp)
  	}
  	if (status < 0) {
--- 411,418 ----
  			if (krec.size > sizeof(buf)) data = malloc(krec.size);
  			else data = buf;
! 			if (data!=NULL) memcpy(data,krec.data,krec.size);
  		}
  		BSDDB_END_SAVE(dp)
+ 		if (data==NULL) return PyErr_NoMemory();
  	}
  	if (status < 0) {
***************
*** 468,474 ****
  		if (drec.size > sizeof(buf)) data = malloc(drec.size);
  		else data = buf;
! 		memcpy(data,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
  	if (status != 0) {
  		if (status < 0)
--- 471,478 ----
  		if (drec.size > sizeof(buf)) data = malloc(drec.size);
  		else data = buf;
! 		if (data!=NULL) memcpy(data,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
+ 	if (data==NULL) return PyErr_NoMemory();
  	if (status != 0) {
  		if (status < 0)
***************
*** 506,516 ****
  		if (krec.size > sizeof(kbuf)) kdata = malloc(krec.size);
  		else kdata = kbuf;
! 		memcpy(kdata,krec.data,krec.size);
  		if (drec.size > sizeof(dbuf)) ddata = malloc(drec.size);
  		else ddata = dbuf;
! 		memcpy(ddata,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
! 	if (status != 0) {
  		if (status < 0)
  			PyErr_SetFromErrno(BsddbError);
--- 510,525 ----
  		if (krec.size > sizeof(kbuf)) kdata = malloc(krec.size);
  		else kdata = kbuf;
! 		if (kdata!=NULL) memcpy(kdata,krec.data,krec.size);
  		if (drec.size > sizeof(dbuf)) ddata = malloc(drec.size);
  		else ddata = dbuf;
! 		if (ddata!=NULL) memcpy(ddata,drec.data,drec.size);
  	}
  	BSDDB_END_SAVE(dp)
! 	if (status == 0) {
! 		if ((kdata==NULL) || (ddata==NULL)) 
! 			return PyErr_NoMemory();
! 	}
! 	else { 
! 		/* (status != 0) */  
  		if (status < 0)
  			PyErr_SetFromErrno(BsddbError);