diff options
author | Ulrich Drepper <drepper@redhat.com> | 1999-09-27 16:47:01 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 1999-09-27 16:47:01 +0000 |
commit | 508d9ff8ac32ca869ed0f5b4139db1e9d877a462 (patch) | |
tree | 3fa7de15b60503b33afd51b19992d187266cbab4 /locale/programs/ld-collate.c | |
parent | df0997401f21bdf6bac06b362d8bbce92394c534 (diff) | |
download | glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar.gz glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.tar.bz2 glibc-508d9ff8ac32ca869ed0f5b4139db1e9d877a462.zip |
Update.
* locale/programs/ld-collate.c (insert_value): Add hack to not
crash in incomplete collate implementation.
Diffstat (limited to 'locale/programs/ld-collate.c')
-rw-r--r-- | locale/programs/ld-collate.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c index 070c65a2d8..fcfdc817a0 100644 --- a/locale/programs/ld-collate.c +++ b/locale/programs/ld-collate.c @@ -423,7 +423,7 @@ insert_value (struct linereader *ldfile, struct token *arg, /* Try to find the character in the charmap. */ seq = charmap_find_value (charmap, arg->val.str.startmb, arg->val.str.lenmb); - if (wc == ILLEGAL_CHAR_VALUE) + if (wc == ILLEGAL_CHAR_VALUE && seq == NULL) { /* It's no character, so look through the collation elements and symbol list. */ @@ -435,17 +435,29 @@ insert_value (struct linereader *ldfile, struct token *arg, /* It's a collation symbol. */ struct symbol_t *sym = (struct symbol_t *) result; elem = sym->order; + + if (elem == NULL) + elem = sym->order = new_element (collate, arg->val.str.startmb, + arg->val.str.startwc); } else if (find_entry (&collate->elem_table, arg->val.str.startmb, - arg->val.str.lenmb, &result) != 0) + arg->val.str.lenmb, &elem) != 0) /* It's also no collation element. Therefore ignore it. */ return; } + else + { + /* Otherwise the symbols stands for an character. Make sure it is + not already in the table. */ + + } - /* XXX elem must be defined. */ + if (elem == NULL) + /* XXX HACK HACK HACK */ + return; /* Test whether this element is not already in the list. */ - if (elem->next != NULL) + if (elem->next != NULL || elem->next == collate->cursor) { lr_error (ldfile, _("order for `%.*s' already defined at %s:%Z"), arg->val.str.startmb, arg->val.str.lenmb, |