Skip to content

Commit 557bfce

Browse files
committed
Squashed 'libreadtags/' changes from 6925e6f5b..203af8750
203af8750 Update NEWS.md 357a24097 Merge pull request #34 from rootkea/small-fixes b71b80f7d tests: Use snprintf() instead of sprintf() f72ff0ccf tests: Remove redundant code ca65d93f5 tests: Remove redundant argument 4ab2657f7 buildsys: Set executable (+x) permission on autogen.sh 35792f41d Access `file->err` only if `file` is not NULL 6c0df5ba8 Merge pull request #31 from masatake/suppress-debug-output 578080eb5 Delete DEBUG output 66991f262 tests: accept any error 8794cbb98 .gitignore: add test cases 0af03e27e tests: print errno 2cbadd42d circleci: show the log of failed cases git-subtree-dir: libreadtags git-subtree-split: 203af8750d246514f8fd9af12a48ef6f2cdf5fdb
1 parent ff8fc24 commit 557bfce

File tree

8 files changed

+65
-34
lines changed

8 files changed

+65
-34
lines changed

.circleci/config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
- run:
2424
name: Test
2525
command: |
26-
make check
26+
make check VERBOSE=1
2727
fedora31_distcheck:
2828
working_directory: ~/libreadtags
2929
docker:

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,11 @@ test-driver
3131

3232
tests/*.log
3333
tests/*.trs
34+
tests/test-api-tagsClose
3435
tests/test-api-tagsFind
3536
tests/test-api-tagsFirst
3637
tests/test-api-tagsFirstPseudoTag
3738
tests/test-api-tagsOpen
39+
tests/test-api-tagsSetSortType
3840
tests/test-fix-null-deref
3941
tests/test-fix-unescaping

NEWS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
# Version ???
2+
3+
- delete debug output automatically printed when DEBUG is defiend in
4+
build-time.
5+
6+
- fix potential crashes trigged when passing NULL as `file` parameter
7+
to the API functions. Provided by rootkea (GitHub account).
8+
19
# Version 0.1.0
210

311
- propagate internal errors to caller

autogen.sh

100644100755
File mode changed.

readtags.c

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -870,19 +870,23 @@ static void terminate (tagFile *const file)
870870
static tagResult readNext (tagFile *const file, tagEntry *const entry)
871871
{
872872
tagResult result;
873-
if (file == NULL || ! file->initialized)
873+
874+
if (file == NULL)
875+
return TagFailure;
876+
877+
if (! file->initialized)
874878
{
875879
file->err = TagErrnoInvalidArgument;
876-
result = TagFailure;
877-
}
878-
else if (! readTagLine (file, &file->err))
879-
result = TagFailure;
880-
else
881-
{
882-
result = (entry != NULL)
883-
? parseTagLine (file, entry, &file->err)
884-
: TagSuccess;
880+
return TagFailure;
885881
}
882+
883+
if (! readTagLine (file, &file->err))
884+
return TagFailure;
885+
886+
result = (entry != NULL)
887+
? parseTagLine (file, entry, &file->err)
888+
: TagSuccess;
889+
886890
return result;
887891
}
888892

@@ -1034,7 +1038,10 @@ static tagResult findSequentialFull (tagFile *const file,
10341038
int (* isAcceptable) (tagFile *const, void *),
10351039
void *data)
10361040
{
1037-
if (file == NULL || !file->initialized || file->err)
1041+
if (file == NULL)
1042+
return TagFailure;
1043+
1044+
if (!file->initialized || file->err)
10381045
{
10391046
file->err = TagErrnoInvalidArgument;
10401047
return TagFailure;
@@ -1095,18 +1102,12 @@ static tagResult find (tagFile *const file, tagEntry *const entry,
10951102
if ((file->sortMethod == TAG_SORTED && !file->search.ignorecase) ||
10961103
(file->sortMethod == TAG_FOLDSORTED && file->search.ignorecase))
10971104
{
1098-
#ifdef DEBUG
1099-
fputs ("<performing binary search>\n", stderr);
1100-
#endif
11011105
result = findBinary (file);
11021106
if (result == TagFailure && file->err)
11031107
return TagFailure;
11041108
}
11051109
else
11061110
{
1107-
#ifdef DEBUG
1108-
fputs ("<performing sequential search>\n", stderr);
1109-
#endif
11101111
result = findSequential (file);
11111112
if (result == TagFailure && file->err)
11121113
return TagFailure;
@@ -1155,9 +1156,12 @@ static tagResult findNext (tagFile *const file, tagEntry *const entry)
11551156

11561157
static tagResult findPseudoTag (tagFile *const file, int rewindBeforeFinding, tagEntry *const entry)
11571158
{
1158-
if (file == NULL || (!file->initialized) || file->err)
1159+
if (file == NULL)
1160+
return TagFailure;
1161+
1162+
if (!file->initialized || file->err)
11591163
{
1160-
file->err= TagErrnoInvalidArgument;;
1164+
file->err = TagErrnoInvalidArgument;
11611165
return TagFailure;
11621166
}
11631167

@@ -1188,7 +1192,10 @@ extern tagFile *tagsOpen (const char *const filePath, tagFileInfo *const info)
11881192

11891193
extern tagResult tagsSetSortType (tagFile *const file, const tagSortType type)
11901194
{
1191-
if (file == NULL || (!file->initialized) || file->err)
1195+
if (file == NULL)
1196+
return TagFailure;
1197+
1198+
if (!file->initialized || file->err)
11921199
{
11931200
file->err = TagErrnoInvalidArgument;
11941201
return TagFailure;
@@ -1209,7 +1216,10 @@ extern tagResult tagsSetSortType (tagFile *const file, const tagSortType type)
12091216

12101217
extern tagResult tagsFirst (tagFile *const file, tagEntry *const entry)
12111218
{
1212-
if (file == NULL || (!file->initialized) || file->err)
1219+
if (file == NULL)
1220+
return TagFailure;
1221+
1222+
if (!file->initialized || file->err)
12131223
{
12141224
file->err = TagErrnoInvalidArgument;
12151225
return TagFailure;
@@ -1222,7 +1232,10 @@ extern tagResult tagsFirst (tagFile *const file, tagEntry *const entry)
12221232

12231233
extern tagResult tagsNext (tagFile *const file, tagEntry *const entry)
12241234
{
1225-
if (file == NULL || (!file->initialized) || file->err)
1235+
if (file == NULL)
1236+
return TagFailure;
1237+
1238+
if (!file->initialized || file->err)
12261239
{
12271240
file->err = TagErrnoInvalidArgument;
12281241
return TagFailure;
@@ -1242,21 +1255,29 @@ extern const char *tagsField (const tagEntry *const entry, const char *const key
12421255
extern tagResult tagsFind (tagFile *const file, tagEntry *const entry,
12431256
const char *const name, const int options)
12441257
{
1245-
if (file == NULL || !file->initialized || file->err)
1258+
if (file == NULL)
1259+
return TagFailure;
1260+
1261+
if (!file->initialized || file->err)
12461262
{
12471263
file->err = TagErrnoInvalidArgument;
12481264
return TagFailure;
12491265
}
1266+
12501267
return find (file, entry, name, options);
12511268
}
12521269

12531270
extern tagResult tagsFindNext (tagFile *const file, tagEntry *const entry)
12541271
{
1255-
if (file == NULL || !file->initialized || file->err)
1272+
if (file == NULL)
1273+
return TagFailure;
1274+
1275+
if (!file->initialized || file->err)
12561276
{
12571277
file->err = TagErrnoInvalidArgument;
12581278
return TagFailure;
12591279
}
1280+
12601281
return findNext (file, entry);
12611282
}
12621283

tests/test-api-tagsFind.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ check_finding0 (tagFile *t, const char *name, const int options,
6565
if (err == x->err)
6666
{
6767
if (err == 0)
68-
fprintf (stderr, "not found, and it is expected\n", err);
68+
fprintf (stderr, "not found, and it is expected\n");
6969
else
7070
fprintf (stderr, "error as expected: %d\n", err);
7171
continue;
7272
}
7373
else
7474
{
75-
fprintf (stderr, "errer number doesn't match: %d (expected: %d)\n",
75+
fprintf (stderr, "error number doesn't match: %d (expected: %d)\n",
7676
err, x->err);
7777
return 1;
7878
}

tests/test-api-tagsOpen.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ main (void)
157157
}
158158
fprintf (stderr, "ok\n");
159159

160-
fprintf (stderr, "opening a / (EISDIR is expected)...");
160+
fprintf (stderr, "opening a / (an error is expected)...");
161+
info.status.error_number = 0;
161162
t = tagsOpen ("/", &info);
162163
if (t != NULL)
163164
{
@@ -169,12 +170,12 @@ main (void)
169170
fprintf (stderr, "unexpected result (opened != 0)\n");
170171
return 1;
171172
}
172-
else if (info.status.error_number != EISDIR)
173+
else if (info.status.error_number == 0)
173174
{
174-
fprintf (stderr, "unexpected result (error_number != EISDIR)\n");
175+
fprintf (stderr, "no error\n");
175176
return 1;
176177
}
177-
fprintf (stderr, "ok\n");
178+
fprintf (stderr, "ok (errno: %d)\n", info.status.error_number);
178179

179180
fprintf (stderr, "closing the unopened tag file...");
180181
if (tagsClose (t) == TagSuccess)
@@ -275,9 +276,9 @@ main (void)
275276
for (int i = 0; i < 6; i++)
276277
{
277278
char tagf_name_tmpl [] = "./api-tagsOpen-incomplete-program-author-%d.tags";
278-
char tagf_name [sizeof (tagf_name_tmpl)];
279+
char tagf_name [sizeof (tagf_name_tmpl) - 1];
279280
fprintf (stderr, "opening a tags file with incomplete PROGRAM_AUTHOR field [trimming level: %d]...", i);
280-
sprintf (tagf_name, tagf_name_tmpl, i);
281+
snprintf (tagf_name, sizeof (tagf_name), tagf_name_tmpl, i);
281282
t = tagsOpen (tagf_name, &info);
282283
if (t == NULL)
283284
{

tests/test-fix-null-deref.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ main (void)
4141
fprintf (stderr, "ok\n");
4242

4343
tagEntry e;
44-
tagResult r;
4544

4645
/* Without fix, this program crashes in tagsFirst(). */
4746
tagsFirst (t, &e);

0 commit comments

Comments
 (0)