summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPip Cet <pipcet@protonmail.com>2026-05-24 10:11:33 +0000
committerPip Cet <pipcet@protonmail.com>2026-05-24 10:11:33 +0000
commit94dbab2fe45fdcdcefc3a19ecf6c2063eecc1df2 (patch)
tree1b531f71fa10cb2633fefb34c2899aa5b2886b6a
parentc146e3643c4eb2fc52fa730df9388544a31feb40 (diff)
Fix 'do_casify_natnum' for events with all flags set
* src/casefiddle.c (do_casify_natnum): Extend range a little, to cover character events with all modifier flags set. * test/src/casefiddle-tests.el (casefiddle-allflags): New test.
-rw-r--r--src/casefiddle.c2
-rw-r--r--test/src/casefiddle-tests.el9
2 files changed, 10 insertions, 1 deletions
diff --git a/src/casefiddle.c b/src/casefiddle.c
index fb44081b215..162014d4716 100644
--- a/src/casefiddle.c
+++ b/src/casefiddle.c
@@ -253,7 +253,7 @@ do_casify_natnum (struct casing_context *ctx, Lisp_Object obj)
/* If the character has higher bits set above the flags, return it unchanged.
It is not a real character. */
- if (! (0 <= ch && ch <= flagbits))
+ if (! (0 <= ch && ch <= flagbits + MAX_CHAR))
return obj;
int flags = ch & flagbits;
diff --git a/test/src/casefiddle-tests.el b/test/src/casefiddle-tests.el
index dcbe2e32c22..28895ec921e 100644
--- a/test/src/casefiddle-tests.el
+++ b/test/src/casefiddle-tests.el
@@ -306,4 +306,13 @@
(casefiddle-tests--check-syms "aa_bb cc_dd" "Aa_Bb Cc_Dd" "Aa_bb Cc_dd")
(casefiddle-tests--check-syms "Aa_Bb Cc_Dd" "Aa_Bb Cc_Dd" "Aa_Bb Cc_Dd"))
+(ert-deftest casefiddle-allflags ()
+ "Check that all-flags events are properly handled by `upcase'."
+ ;; U+00FF LATIN SMALL LETTER Y WITH DIAERESIS
+ ;; U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
+ (should (= (upcase ?\xff)
+ ?\x178))
+ (should (= (upcase ?\A-\C-\H-\S-\s-\M-\xff)
+ ?\A-\C-\H-\S-\s-\M-\x178)))
+
;;; casefiddle-tests.el ends here