changeset: 4440:69b803c646cd63b4120fdeb02d17a7039e7cff83
parent: 4438:eb82fbb675eaf416e276645ef7842240473d6cbe
user: Aidan Kehoe <kehoea(a)parhasard.net>
date: Mon Feb 11 22:34:51 2008 +0100
files: src/ChangeLog src/search.c tests/ChangeLog tests/automated/case-tests.el
description:
Fail searches immediately if searching for non-representable characters.
2008-02-11 Aidan Kehoe <kehoea(a)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(a)parhasard.net>
* automated/case-tests.el (Assert):
New test case; thank you Michael Sperber.
diff -r eb82fbb675eaf416e276645ef7842240473d6cbe -r
69b803c646cd63b4120fdeb02d17a7039e7cff83 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-03 Jerry James <james(a)xemacs.o
+2008-02-11 Aidan Kehoe <kehoea(a)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(a)xemacs.org>
* redisplay.c (generate_displayable_area): If a line has been
diff -r eb82fbb675eaf416e276645ef7842240473d6cbe -r
69b803c646cd63b4120fdeb02d17a7039e7cff83 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 @@ search_buffer (struct buffer *buf, Lisp_
&& (translated != c || inverse != c))
{
Ichar starting_c = c;
- int charset_base_code;
+ int charset_base_code, checked = 0;
do
{
@@ -1398,6 +1398,8 @@ search_buffer (struct buffer *buf, Lisp_
if (c > 0xFF && nothing_greater_than_0xff)
continue;
+
+ checked = 1;
if (-1 == charset_base) /* No charset yet specified. */
{
@@ -1424,6 +1426,23 @@ search_buffer (struct buffer *buf, Lisp_
}
}
} 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 eb82fbb675eaf416e276645ef7842240473d6cbe -r
69b803c646cd63b4120fdeb02d17a7039e7cff83 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-01-30 Aidan Kehoe <kehoea@parhasa
+2008-02-11 Aidan Kehoe <kehoea(a)parhasard.net>
+
+ * automated/case-tests.el (Assert):
+ New test case; thank you Michael Sperber.
+
2008-01-30 Aidan Kehoe <kehoea(a)parhasard.net>
* automated/case-tests.el (pristine-case-table):
diff -r eb82fbb675eaf416e276645ef7842240473d6cbe -r
69b803c646cd63b4120fdeb02d17a7039e7cff83 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
@@ -283,6 +283,9 @@
(with-string-as-buffer-contents "\n\nDer beruhmte deutsche Flei\xdf\n\n"
(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
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://calypso.tux.org/cgi-bin/mailman/listinfo/xemacs-patches