Skip to content

Commit 6a52070

Browse files
authored
fstReaderOpen should not fail on empty FST file (#15)
Looks good to me, confirming.
1 parent 05f2be5 commit 6a52070

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

src/fstapi.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4756,7 +4756,7 @@ fstReaderContext *fstReaderOpen(const char *nam)
47564756
((xc->fh) || (xc->contains_hier_section || (xc->contains_hier_section_lz4)))) {
47574757
/* more init */
47584758
xc->do_rewind = 1;
4759-
} else {
4759+
} else if (!rc) {
47604760
fstReaderClose(xc);
47614761
xc = NULL;
47624762
}

tests/empty_file.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#include <fstapi.h>
2+
#include <glib.h>
3+
4+
int main(int argc, char **argv)
5+
{
6+
(void)argc;
7+
(void)argv;
8+
9+
// Write empty FST file
10+
11+
fstWriterContext *writer = fstWriterCreate("empty1.fst", 1);
12+
g_assert_true(writer != NULL);
13+
14+
fstWriterClose(writer);
15+
16+
// Should be able to open the generated FST file
17+
18+
fstReaderContext *reader = fstReaderOpen("empty1.fst");
19+
g_assert_true(reader != NULL);
20+
21+
g_assert_cmpint(fstReaderGetStartTime(reader), ==, 0);
22+
g_assert_cmpint(fstReaderGetEndTime(reader), ==, 0);
23+
g_assert_cmpint(fstReaderGetVarCount(reader), ==, 0);
24+
g_assert_cmpint(fstReaderGetScopeCount(reader), ==, 0);
25+
g_assert_cmpint(fstReaderGetAliasCount(reader), ==, 0);
26+
27+
struct fstHier *iter = fstReaderIterateHier(reader);
28+
g_assert_true(iter == NULL);
29+
30+
fstReaderClose(reader);
31+
32+
// An empty file without FST header should still fail
33+
34+
FILE *f = fopen("empty2.fst", "w");
35+
g_assert_true(f != NULL);
36+
37+
fclose(f);
38+
39+
reader = fstReaderOpen("empty2.fst");
40+
g_assert_true(reader == NULL);
41+
42+
return 0;
43+
}

tests/meson.build

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
libfst_tests = [
22
'write_and_read',
3+
'empty_file',
34
]
45

56
foreach test : libfst_tests
@@ -10,4 +11,4 @@ foreach test : libfst_tests
1011
)
1112

1213
test(test, exe)
13-
endforeach
14+
endforeach

0 commit comments

Comments
 (0)