[programs] Fix infinite loop when empty input is passed to trainer

When an empty input file was passed to the dictionary trainer, it would infinite loop.
The added test case exposes the bug, and is fixed with this PR.
dev
Nick Terrell 2022-03-02 11:04:04 -08:00
parent 87406b5f3b
commit da737c7ab8
3 changed files with 14 additions and 1 deletions

View File

@ -128,8 +128,11 @@ static int DiB_loadFiles(
while ( nbSamplesLoaded < sstSize && fileIndex < nbFiles ) {
size_t fileDataLoaded;
S64 const fileSize = DiB_getFileSize(fileNamesTable[fileIndex]);
if (fileSize <= 0) /* skip if zero-size or file error */
if (fileSize <= 0) {
/* skip if zero-size or file error */
++fileIndex;
continue;
}
f = fopen( fileNamesTable[fileIndex], "rb");
if (f == NULL)

View File

@ -0,0 +1,9 @@
#!/bin/sh
set -e
for i in $(seq 50); do
datagen -s$i > file$i
done
touch empty
set -v
zstd -q --train empty file*

View File

@ -0,0 +1 @@
zstd -q --train empty file*