X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fcatdoc.git;a=blobdiff_plain;f=src%2Fole.c;h=819ad33eded3a86271b6507c34d7855cd7e69a55;hp=1e26dd797a190d98712ddce6d5a1927471bfae3c;hb=35d0d9bcbb33b64c3cfd83548fc9fc1cbdb5295e;hpb=ccf8e1947728585acd2301c9b8e459e6918bfb5f diff --git a/src/ole.c b/src/ole.c index 1e26dd7..819ad33 100644 --- a/src/ole.c +++ b/src/ole.c @@ -125,7 +125,11 @@ FILE* ole_init(FILE *f, void *buffer, size_t bufSize) { memcpy(tmpBuf,oleBuf+0x4c,MSAT_ORIG_SIZE); mblock=getlong(oleBuf,0x44); msat_size=getlong(oleBuf,0x48); - if (msat_size * sectorSize) + if (msat_size * sectorSize > fileLength) { + free(tmpBuf); + return NULL; + } + /* fprintf(stderr, "msat_size=%ld\n", msat_size); */ i=0; @@ -495,8 +499,8 @@ size_t ole_read(void *ptr, size_t size, size_t nmemb, FILE *stream) { int readbytes; blockNumber++; newoffset = calcFileBlockOffset(e,blockNumber); - if (newoffset != e->file_offset); - fseek(e->file, e->file_offset=newoffset , SEEK_SET); + if (newoffset != e->file_offset) + fseek(e->file, e->file_offset=newoffset , SEEK_SET); readbytes=fread(cptr+rread, 1, min(llen-rread, ssize), e->file); rread +=readbytes; e->file_offset +=readbytes;