From: Yann Collet Date: Wed, 2 Nov 2016 20:57:55 +0000 (-0700) Subject: Fix #418 : printing selected segments in zdict debug mode can segfault with certain... X-Git-Tag: v1.1.2~97 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0a5a5fb7fd7b23994dc916c7b290aa9b8422c06f;p=thirdparty%2Fzstd.git Fix #418 : printing selected segments in zdict debug mode can segfault with certain pathological patterns --- diff --git a/lib/dictBuilder/zdict.c b/lib/dictBuilder/zdict.c index b3f20b12b..ea50b54ad 100644 --- a/lib/dictBuilder/zdict.c +++ b/lib/dictBuilder/zdict.c @@ -898,12 +898,14 @@ size_t ZDICT_trainFromBuffer_unsafe( U32 const nb = MIN(25, dictList[0].pos); U32 const dictContentSize = ZDICT_dictSize(dictList); U32 u; - DISPLAYLEVEL(3, "\n %u segments found, of total size %u \n", dictList[0].pos, dictContentSize); - DISPLAYLEVEL(3, "list %u best segments \n", nb); - for (u=1; u<=nb; u++) { - U32 pos = dictList[u].pos; - U32 length = dictList[u].length; - U32 printedLength = MIN(40, length); + DISPLAYLEVEL(3, "\n %u segments found, of total size %u \n", dictList[0].pos-1, dictContentSize); + DISPLAYLEVEL(3, "list %u best segments \n", nb-1); + for (u=1; u samplesBuffSize) || ((pos + length) > samplesBuffSize)) + return ERROR(GENERIC); /* should never happen */ DISPLAYLEVEL(3, "%3u:%3u bytes at pos %8u, savings %7u bytes |", u, length, pos, dictList[u].savings); ZDICT_printHex((const char*)samplesBuffer+pos, printedLength);