carbon2-commit: Fail searches immediately if searching for non-representable characters.

Aidan Kehoe aidan-guest at alioth.debian.org
Sat Apr 5 08:42:43 EDT 2008


changeset:   4440:69b803c646cd63b4120fdeb02d17a7039e7cff83
parent:      4438:eb82fbb675eaf416e276645ef7842240473d6cbe
user:        Aidan Kehoe <kehoea at 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 at 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 at 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 at xemacs.o
+2008-02-11  Aidan Kehoe  <kehoea at 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 at 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 at parhasa
+2008-02-11  Aidan Kehoe  <kehoea at parhasard.net>
+
+	* automated/case-tests.el (Assert): 
+	New test case; thank you Michael Sperber. 
+
 2008-01-30  Aidan Kehoe  <kehoea at 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





More information about the XEmacs-Patches mailing list