X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/f15300499bce37cd28ea2ace0f2bd1c364fc835e..944c4044572da20ed1fb9bc01085221856b53c1f:/index.c diff --git a/index.c b/index.c index 5dde59f..628934e 100644 --- a/index.c +++ b/index.c @@ -109,8 +109,6 @@ void index_merge(indexdata *idx, int is_explicit, wchar_t *tags, word *text, t->implicit_text = text; t->implicit_fpos = *fpos; } else { - sfree(t); - t = existing; if (!is_explicit) { /* * An implicit \IM for a tag that's had an implicit @@ -119,12 +117,25 @@ void index_merge(indexdata *idx, int is_explicit, wchar_t *tags, word *text, * differences. And check the tag for case match * against the existing tag, likewise. */ + + /* + * Check the tag against its previous occurrence to + * see if the cases match. + */ + if (ustrcmp(t->name, existing->name)) { + error(err_indexcase, fpos, t->name, + &existing->implicit_fpos, existing->name); + } + + sfree(t); } else { /* * An explicit \IM added to a valid tag. In * particular, this removes the implicit \IM if * present. */ + sfree(t); + t = existing; if (t->implicit_text) { free_word_list(t->implicit_text); t->implicit_text = NULL;