Subject: bug#13084: closed (Re: bug#13084: boyer_moore crashes with certain characters in the case table)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 12 Dec 2012 23:11:01 +0000

Your bug report

#13084: boyer_moore crashes with certain characters in the case table

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
13084: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=13084
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#13084: boyer_moore crashes with certain characters in the case table
From: Juri Linkov <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Thu, 13 Dec 2012 01:05:09 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> So what did you mean by "no more obstacles" above?

By obstacles I meant crashes that you fixed.
Thanks for that.  I'm closing this bug.

Subject: boyer_moore crashes with certain characters in the case table
From: Juri Linkov <[email-masked]>
To: [email-masked]
Date: Wed, 05 Dec 2012 02:34:39 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

The minimal reproducible recipe for crashes in boyer_moore noticed in bug#13041:

1. emacs -Q

2. Eval in *scratch*:

(let ((table (standard-case-table)) canon)
  (setq canon (copy-sequence table))
  (aset canon #xff59 ?y)
  (set-char-table-extra-slot table 1 canon)
  (set-char-table-extra-slot table 2 nil)
  (set-standard-case-table table))

3. Start an activity that includes a search, e.g. `C-x 8 RET TAB'

The crash in boyer_moore is caused by fullwidth characters like #xff59
whose Unicode properties are:

  name: FULLWIDTH LATIN SMALL LETTER Y
  decomposition: (wide 121) (wide 'y')

However, the crash doesn't occur when the same fullwidth characters are
set to their downcase counterparts in lisp/international/characters.el:

  ;; Fullwidth Latin
  (setq c #xff21)
  (while (<= c #xff3a)
    (set-case-syntax-pair c (+ c #x20) tbl)
    (modify-category-entry c ?l)
    (modify-category-entry (+ c #x20) ?l)
    (setq c (1+ c)))