GNU bug report logs - #73985
fix: charset.max_char may be used before being set

Previous Next

Package: emacs;

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

From: Eli Zaretskii <eliz <at> gnu.org>
To: altermo31 <at> proton.me
Cc: 73985 <at> debbugs.gnu.org
Subject: bug#73985: fix: charset.max_char may be used before being set
Date: Thu, 24 Oct 2024 17:42:36 +0300
> 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.