From 94dbab2fe45fdcdcefc3a19ecf6c2063eecc1df2 Mon Sep 17 00:00:00 2001 From: Pip Cet Date: Sun, 24 May 2026 10:11:33 +0000 Subject: [PATCH] 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. --- src/casefiddle.c | 2 +- test/src/casefiddle-tests.el | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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