Mercurial > hg > xemacs-beta
changeset 4421:69b803c646cd
Fail searches immediately if searching for non-representable characters.
2008-02-11 Aidan Kehoe <kehoea@parhasard.net>
* 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 <kehoea@parhasard.net>
* automated/case-tests.el (Assert):
New test case; thank you Michael Sperber.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Mon, 11 Feb 2008 22:34:51 +0100 |
parents | eb82fbb675ea |
children | cb33e804774d |
files | src/ChangeLog src/search.c tests/ChangeLog tests/automated/case-tests.el |
diffstat | 4 files changed, 36 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- 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 <kehoea@parhasard.net> + + * 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 <james@xemacs.org> * redisplay.c (generate_displayable_area): If a line has been
--- 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)) {
--- 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 <kehoea@parhasard.net> + + * automated/case-tests.el (Assert): + New test case; thank you Michael Sperber. + 2008-01-30 Aidan Kehoe <kehoea@parhasard.net> * automated/case-tests.el (pristine-case-table):
--- 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"