GNU bug report logs -
#73985
fix: charset.max_char may be used before being set
Previous Next
Reported by: altermo31 <altermo31 <at> proton.me>
Date: Thu, 24 Oct 2024 13:03:02 UTC
Severity: normal
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
> Cc: 73985 <at> debbugs.gnu.org
> Date: Thu, 24 Oct 2024 17:12:13 +0300
> From: Eli Zaretskii <eliz <at> gnu.org>
>
> > Date: Thu, 24 Oct 2024 11:46:17 +0000
> > From: altermo31 via "Bug reports for GNU Emacs,
> > the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
> >
> > Problem:
> > If the value to be set to charset.max_char is invalid, an error occurs, but the error uses the yet unset charset.max_char.
> >
> > Solution:
> > Use the value that charset.max_char would be set to if the value wasn't invalid.
>
> Thanks. You are right that the original code is incorrect, but the
> code you propose has a subtle problem: the sum
>
> i + charset.code_offset
>
> could overflow. So we need to find a safer way of explaining the
> problem.
I fixed that (on the master branch) like this:
diff --git a/src/charset.c b/src/charset.c
index e8d0826..f7d80cc 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1007,7 +1007,8 @@ DEFUN ("define-charset-internal", Fdefine_charset_internal,
i = CODE_POINT_TO_INDEX (&charset, charset.max_code);
if (MAX_CHAR - charset.code_offset < i)
- error ("Unsupported max char: %d", charset.max_char);
+ error ("Unsupported max char: %d + %ud > MAX_CHAR (%d)",
+ i, charset.max_code, MAX_CHAR);
charset.max_char = i + charset.code_offset;
i = CODE_POINT_TO_INDEX (&charset, charset.min_code);
charset.min_char = i + charset.code_offset;
This bug report was last modified 250 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.