diff options
| author | Paul Eggert | 2014-03-26 10:55:31 -0700 |
|---|---|---|
| committer | Paul Eggert | 2014-03-26 10:55:31 -0700 |
| commit | 3fd3e736934750c8b0e73b8327f0b75d3b09bf78 (patch) | |
| tree | 61c9c1c31a18ad85201f8b3182a6dd33427fd1d6 /src | |
| parent | 196716cf35f81bea108c3b75362e92c86ed1c016 (diff) | |
| download | emacs-3fd3e736934750c8b0e73b8327f0b75d3b09bf78.tar.gz emacs-3fd3e736934750c8b0e73b8327f0b75d3b09bf78.zip | |
More backward-compatible fix to char-equal core dump.
* editfns.c (Fchar_equal): In unibyte buffers, assume values in
range 128-255 are raw bytes. Suggested by Eli Zaretskii.
Fixes: debbugs:17011
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 6 | ||||
| -rw-r--r-- | src/editfns.c | 20 |
2 files changed, 20 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index bf27ece6af7..025ea45b23b 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,4 +1,8 @@ | |||
| 1 | 2014-03-26 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2014-03-26 Paul Eggert <eggert@penguin.cs.ucla.edu> |
| 2 | |||
| 3 | More backward-compatible fix to char-equal core dump (Bug#17011). | ||
| 4 | * editfns.c (Fchar_equal): In unibyte buffers, assume values in | ||
| 5 | range 128-255 are raw bytes. Suggested by Eli Zaretskii. | ||
| 2 | 6 | ||
| 3 | Fix core dump in char-equal (Bug#17011). | 7 | Fix core dump in char-equal (Bug#17011). |
| 4 | * editfns.c (Fchar_equal): Do not use MAKE_CHAR_MULTIBYTE in | 8 | * editfns.c (Fchar_equal): Do not use MAKE_CHAR_MULTIBYTE in |
diff --git a/src/editfns.c b/src/editfns.c index 1986ee53d23..9c1fcb0b790 100644 --- a/src/editfns.c +++ b/src/editfns.c | |||
| @@ -4377,13 +4377,23 @@ Case is ignored if `case-fold-search' is non-nil in the current buffer. */) | |||
| 4377 | if (NILP (BVAR (current_buffer, case_fold_search))) | 4377 | if (NILP (BVAR (current_buffer, case_fold_search))) |
| 4378 | return Qnil; | 4378 | return Qnil; |
| 4379 | 4379 | ||
| 4380 | /* FIXME: When enable-multibyte-characters is nil, it's still possible | ||
| 4381 | to manipulate multibyte chars, which means there is a bug for chars | ||
| 4382 | in the range 128-255 as we can't tell whether they are eight-bit | ||
| 4383 | bytes or Latin-1 chars. For now, assume the latter. See Bug#17011. | ||
| 4384 | Also see casefiddle.c's casify_object, which has a similar problem. */ | ||
| 4385 | i1 = XFASTINT (c1); | 4380 | i1 = XFASTINT (c1); |
| 4386 | i2 = XFASTINT (c2); | 4381 | i2 = XFASTINT (c2); |
| 4382 | |||
| 4383 | /* FIXME: It is possible to compare multibyte characters even when | ||
| 4384 | the current buffer is unibyte. Unfortunately this is ambiguous | ||
| 4385 | for characters between 128 and 255, as they could be either | ||
| 4386 | eight-bit raw bytes or Latin-1 characters. Assume the former for | ||
| 4387 | now. See Bug#17011, and also see casefiddle.c's casify_object, | ||
| 4388 | which has a similar problem. */ | ||
| 4389 | if (NILP (BVAR (current_buffer, enable_multibyte_characters))) | ||
| 4390 | { | ||
| 4391 | if (SINGLE_BYTE_CHAR_P (i1)) | ||
| 4392 | i1 = UNIBYTE_TO_CHAR (i1); | ||
| 4393 | if (SINGLE_BYTE_CHAR_P (i2)) | ||
| 4394 | i2 = UNIBYTE_TO_CHAR (i2); | ||
| 4395 | } | ||
| 4396 | |||
| 4387 | return (downcase (i1) == downcase (i2) ? Qt : Qnil); | 4397 | return (downcase (i1) == downcase (i2) ? Qt : Qnil); |
| 4388 | } | 4398 | } |
| 4389 | 4399 | ||