diff --git a/ChangeLog b/ChangeLog index c340e09..f7b387f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2000-08-19 Bruno Haible + * src/key-list.cc (Key_List::read_keys): Don't accept an empty key. + * src/Makefile.in (install, installdirs, uninstall): Respect $(DESTDIR). * doc/Makefile.in (install, installdirs, uninstall): Likewise. @@ -26,9 +28,6 @@ * tests/Makefile.in (check-lang-syntax): Perform each test with -D once without and once with duplicates. - * src/key-list.cc (Key_List::output_lookup_function_body): Avoid - outputting a trivially satisfied test for len. - * src/key-list.cc (output_keyword_entry): Avoid outputting a struct initializer of the form {"key",}. diff --git a/src/key-list.cc b/src/key-list.cc index 6af4231..c2b0a3e 100644 --- a/src/key-list.cc +++ b/src/key-list.cc @@ -320,6 +320,13 @@ Key_List::read_keys (void) exit (1); } } + /* Exit program if an empty string is used as key, since the comparison + expressions don't work correctly for looking up an empty string. */ + if (min_key_len == 0) + { + fprintf (stderr, "Empty input key is not allowed.\nTo recognize an empty input key, your code should check for\nlen == 0 before calling the gperf generated lookup function.\n"); + exit (1); + } if (option[ALLCHARS]) option.set_keysig_size (max_key_len); } @@ -1523,14 +1530,8 @@ Key_List::output_lookup_function_body (const Output_Compare& comparison) { T (Trace t ("Key_List::output_lookup_function_body");) - /* Since `len' is of type `unsigned int', we can avoid comparing it - against zero. */ - if (min_key_len == 0) - printf (" if (len <= MAX_WORD_LENGTH)\n"); - else - printf (" if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\n"); - - printf (" {\n" + printf (" if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)\n" + " {\n" " register int key = %s (str, len);\n\n", option.get_hash_name ());