# HG changeset patch # User Aidan Kehoe # Date 1202765691 -3600 # Node ID 69b803c646cd63b4120fdeb02d17a7039e7cff83 # Parent eb82fbb675eaf416e276645ef7842240473d6cbe Fail searches immediately if searching for non-representable characters. 2008-02-11 Aidan Kehoe * search.c (search_buffer): In the event that a character is not representable in the buffer, fail immediately. Prevents an assertion failure in the code to deal with whether Boyer-Moore search can be used for such characters. 2008-02-11 Aidan Kehoe * automated/case-tests.el (Assert): New test case; thank you Michael Sperber. diff -r eb82fbb675ea -r 69b803c646cd src/ChangeLog --- a/src/ChangeLog Thu Feb 07 10:03:49 2008 +0100 +++ b/src/ChangeLog Mon Feb 11 22:34:51 2008 +0100 @@ -1,3 +1,11 @@ +2008-02-11 Aidan Kehoe + + * search.c (search_buffer): + In the event that a character is not representable in the buffer, + fail immediately. Prevents an assertion failure in the code to + deal with whether Boyer-Moore search can be used for such + characters. + 2008-02-03 Jerry James * redisplay.c (generate_displayable_area): If a line has been diff -r eb82fbb675ea -r 69b803c646cd src/search.c --- a/src/search.c Thu Feb 07 10:03:49 2008 +0100 +++ b/src/search.c Mon Feb 11 22:34:51 2008 +0100 @@ -1385,7 +1385,7 @@ && (translated != c || inverse != c)) { Ichar starting_c = c; - int charset_base_code; + int charset_base_code, checked = 0; do { @@ -1399,6 +1399,8 @@ if (c > 0xFF && nothing_greater_than_0xff) continue; + checked = 1; + if (-1 == charset_base) /* No charset yet specified. */ { /* Keep track of which charset and character set row @@ -1425,6 +1427,23 @@ } } while (c != starting_c); + if (!checked) + { +#ifdef DEBUG_XEMACS + if (debug_xemacs_searches) + { + Lisp_Symbol *sym = XSYMBOL (Qsearch_algorithm_used); + sym->value = Qnil; + } +#endif + /* The "continue" clauses were used above, for every + translation of the character. As such, this character + is not to be found in the buffer and neither is the + string as a whole. Return immediately; also avoid + triggering the assertion a few lines down. */ + return n > 0 ? -n : n; + } + if (boyer_moore_ok && charset_base != -1 && charset_base != (translated & ~ICHAR_FIELD3_MASK)) { diff -r eb82fbb675ea -r 69b803c646cd tests/ChangeLog --- a/tests/ChangeLog Thu Feb 07 10:03:49 2008 +0100 +++ b/tests/ChangeLog Mon Feb 11 22:34:51 2008 +0100 @@ -1,3 +1,8 @@ +2008-02-11 Aidan Kehoe + + * automated/case-tests.el (Assert): + New test case; thank you Michael Sperber. + 2008-01-30 Aidan Kehoe * automated/case-tests.el (pristine-case-table): diff -r eb82fbb675ea -r 69b803c646cd tests/automated/case-tests.el --- a/tests/automated/case-tests.el Thu Feb 07 10:03:49 2008 +0100 +++ b/tests/automated/case-tests.el Mon Feb 11 22:34:51 2008 +0100 @@ -284,6 +284,9 @@ (goto-char (point-min)) (Assert (search-forward "Flei\xdf"))) +(with-temp-buffer + (Assert (search-forward "M\xe9zard" nil t))) + (Skip-Test-Unless (boundp 'debug-xemacs-searches) ; normal when we have DEBUG_XEMACS "not a DEBUG_XEMACS build"