|
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:
|