From: Yann Collet Date: Wed, 4 Nov 2015 19:35:33 +0000 (+0100) Subject: fixed issues reported by Maciej Adamczyk X-Git-Tag: zstd-0.3.3^2~2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50c5cdb44ca30860ddebe64c9a3633fa7fc8f04c;p=thirdparty%2Fzstd.git fixed issues reported by Maciej Adamczyk --- diff --git a/lib/zstd.c b/lib/zstd.c index c7dcc262a..db533f9a5 100644 --- a/lib/zstd.c +++ b/lib/zstd.c @@ -921,6 +921,7 @@ size_t ZSTD_decodeLiteralsBlock(void* ctx, { if (litSize > srcSize-3) return ERROR(corruption_detected); memcpy(dctx->litBuffer, istart, litSize); + dctx->litPtr = dctx->litBuffer; dctx->litBufSize = BLOCKSIZE+8; dctx->litSize = litSize; return litSize+3; diff --git a/lib/zstd_internal.h b/lib/zstd_internal.h index 207fd84bf..f63636459 100644 --- a/lib/zstd_internal.h +++ b/lib/zstd_internal.h @@ -171,7 +171,9 @@ static void ZSTD_wildcopy(void* dst, const void* src, size_t length) const BYTE* ip = (const BYTE*)src; BYTE* op = (BYTE*)dst; BYTE* const oend = op + length; - do COPY8(op, ip) while (op < oend); + do + COPY8(op, ip) + while (op < oend); } diff --git a/programs/zstdcli.c b/programs/zstdcli.c index b22095983..4c8460d8a 100644 --- a/programs/zstdcli.c +++ b/programs/zstdcli.c @@ -178,7 +178,7 @@ int main(int argc, char** argv) const char* inFileName = NULL; const char* outFileName = NULL; char* dynNameSpace = NULL; - char extension[] = ZSTD_EXTENSION; + const char extension[] = ZSTD_EXTENSION; displayOut = stderr; /* Pick out basename component. Don't rely on stdlib because of conflicting behavior. */ @@ -351,16 +351,17 @@ int main(int argc, char** argv) } /* decompression to file (automatic name will work only if input filename has correct format extension) */ { - size_t outl; - size_t inl = strlen(inFileName); - dynNameSpace = (char*)calloc(1,inl+1); + size_t filenameSize = strlen(inFileName); + if (strcmp(inFileName + (filenameSize-4), extension)) + { + DISPLAYLEVEL(1, "unknown suffix - cannot determine destination filename\n"); + return badusage(programName); + } + dynNameSpace = (char*)calloc(1,filenameSize+1); if (dynNameSpace==NULL) { DISPLAY("not enough memory\n"); exit(1); } outFileName = dynNameSpace; strcpy(dynNameSpace, inFileName); - outl = inl; - if (inl>4) - while ((outl >= inl-4) && (inFileName[outl] == extension[outl-inl+4])) dynNameSpace[outl--]=0; - if (outl != inl-5) { DISPLAYLEVEL(1, "Cannot determine an output filename\n"); return badusage(programName); } + dynNameSpace[filenameSize-4]=0; DISPLAYLEVEL(2, "Decoding file %s \n", outFileName); } }