From: Chris B. <buc...@us...> - 2012-03-08 21:20:30
|
Update of /cvsroot/sblim/sfcb In directory vz-cvs-3.sog:/tmp/cvs-serv22449 Modified Files: fileRepository.c ChangeLog NEWS Log Message: [ 3499930 ] Check file repository writes Index: NEWS =================================================================== RCS file: /cvsroot/sblim/sfcb/NEWS,v retrieving revision 1.660 retrieving revision 1.661 diff -u -d -r1.660 -r1.661 --- NEWS 8 Mar 2012 06:25:38 -0000 1.660 +++ NEWS 8 Mar 2012 21:20:27 -0000 1.661 @@ -51,6 +51,7 @@ - 3426027 cimAccountPassThrough does not set return code - 3498719 Better SSL error reporting for sfcb - 3471814 segfault in objectImpl.c:131,ClObjectGetClString +- 3499930 Check file repository writes Changes in 1.3.13 ================= Index: fileRepository.c =================================================================== RCS file: /cvsroot/sblim/sfcb/fileRepository.c,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- fileRepository.c 9 Nov 2009 21:03:30 -0000 1.20 +++ fileRepository.c 8 Mar 2012 21:20:27 -0000 1.21 @@ -308,7 +308,7 @@ static int rebuild(BlobIndex *bi, const char *id, void *blob, int blen) { - int ofs,len,xt=0,dt=0; + int ofs,len,xt=0,dt=0,rc=0; unsigned long pos; char *xn=alloca(strlen(bi->dir)+8); char *dn=alloca(strlen(bi->dir)+8); @@ -327,19 +327,24 @@ if (len) copy(d,bi->fd,bi->dlen-(bi->bofs+bi->blen),bi->bofs+bi->blen); dt+=len; pos=ftell(d); - if (blen) fwrite(blob,blen,1,d); + if (blen) + rc = fwrite(blob,blen,1,d) - 1; dt+=blen; - fclose(d); + rc += fclose(d); + if (rc != 0) return -1; adjust(bi,bi->pos,bi->blen); ofs=bi->pos+bi->len; - if (bi->pos) fwrite(bi->index,bi->pos,1,x); + if (bi->pos) + rc = fwrite(bi->index,bi->pos,1,x) - 1; xt+=bi->pos; len=bi->dSize-ofs; - if (len) fwrite(bi->index+ofs,len,1,x); + if (len) + rc += (fwrite(bi->index+ofs,len,1,x) - 1); xt+=len; - fclose(x); + rc += fclose(x); + if (rc != 0) return -1; remove(bi->fnd); remove(bi->fnx); @@ -419,9 +424,13 @@ if (bi->dSize==0) { bi->fd=fopen(bi->fnd,"wb"); if (bi->fd==NULL) { fdHandleError(bi); return -1; } - fwrite(blob,len,1,bi->fd); - fclose(bi->fd); + rc = fwrite(blob,len,1,bi->fd) - 1; /* write the serialized instance */ + rc += fclose(bi->fd); bi->fd=NULL; + if (rc != 0) { + fdHandleError(bi); + return -1; + } es=sprintf(idxe," %zd %s %d %d\r\n",strlen(id),id,len,0); ep=sprintf(idxe,"%d",es); @@ -429,14 +438,18 @@ memcpy(bi->index,idxe,es); bi->dSize=es; - fwrite(bi->index,bi->dSize,1,bi->fx); - fclose(bi->fx); + rc = fwrite(bi->index,bi->dSize,1,bi->fx) - 1; /* write idx file */ + rc += fclose(bi->fx); bi->fx=NULL; + if (rc != 0) { + fdHandleError(bi); + return -1; + } } else { - if (indxLocate(bi,id)) { + if (indxLocate(bi,id)) { /* already have entries in the idx file; append */ bi->fd=fopen(bi->fnd,"rb"); if (bi->fd==NULL) { fdHandleError(bi); return -1; } else { @@ -447,18 +460,22 @@ idxe[ep]=' '; memcpy(bi->index+bi->dSize,idxe,es); bi->dSize+=es; - rebuild(bi,id,blob,len); + if (rebuild(bi,id,blob,len) != 0) { fdHandleError(bi); return -1; } } } - else { + else { /* first entry in the idx file */ bi->fd=fopen(bi->fnd,"ab+"); if (bi->fd==NULL) bi->fd=fopen(bi->fnd,"wb+"); fseek(bi->fd,0,SEEK_END); bi->fpos=ftell(bi->fd); - fwrite(blob,len,1,bi->fd); - fclose(bi->fd); + rc = fwrite(blob,len,1,bi->fd) - 1; + rc += fclose(bi->fd); bi->fd=NULL; + if (rc != 0) { + fdHandleError(bi); + return -1; + } es=sprintf(idxe," %zd %s %d %lu\r\n",strlen(id),id,len,bi->fpos); ep=sprintf(idxe,"%d",es); @@ -467,9 +484,13 @@ memcpy(bi->index+bi->dSize,idxe,es); bi->dSize+=es; fseek(bi->fx,0,SEEK_SET); - fwrite(bi->index,bi->dSize,1,bi->fx); - fclose(bi->fx); + rc = fwrite(bi->index,bi->dSize,1,bi->fx) - 1; + rc += fclose(bi->fx); bi->fx=NULL; + if (rc != 0) { + fdHandleError(bi); + return -1; + } } } freeBlobIndex(&bi,1); @@ -491,7 +512,7 @@ else { fseek(bi->fd,0,SEEK_END); bi->dlen=ftell(bi->fd); - rebuild(bi,id,NULL,0); + if (rebuild(bi,id,NULL,0) != 0) { fdHandleError(bi); return -1; } freeBlobIndex(&bi,1); return 0; } Index: ChangeLog =================================================================== RCS file: /cvsroot/sblim/sfcb/ChangeLog,v retrieving revision 1.737 retrieving revision 1.738 diff -u -d -r1.737 -r1.738 --- ChangeLog 8 Mar 2012 06:25:58 -0000 1.737 +++ ChangeLog 8 Mar 2012 21:20:27 -0000 1.738 @@ -1,3 +1,8 @@ +2012-03-08 Chris Buccella <buc...@li...> + + * fileRepository.c: + [ 3499930 ] Check file repository writes + 2012-03-08 Narasimha Sharoff <nsh...@us...> * objectImpl.c: |