emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Suspicious warning in W64 build


From: Angelo Graziosi
Subject: Re: Suspicious warning in W64 build
Date: Thu, 7 Sep 2017 23:59:32 +0200 (CEST)

> Il 7 settembre 2017 alle 22.20 Eli Zaretskii <address@hidden> ha scritto:
> 
> 
> > Cc: address@hidden, address@hidden
> > From: Paul Eggert <address@hidden>
> > Date: Thu, 7 Sep 2017 12:26:06 -0700
> > 
> > > Yes, I know.  I just don't understand why GCC things that
> > > 
> > >     nglyphs * sizeof (WORD) * 2
> > > 
> > > can have a value in this range.  The type of nglyphs is 'int', and
> > > sizeof(WORD) gives 2.  So the range should be between 0 (or 4) and 4
> > > times INT_MAX, which is nowhere near the values GCC displays.
> > > 
> > 
> > If nglyphs is negative the first multiplication is done using unsigned 
> > arithmetic, which could result in huge results. Presumably GCC does not 
> > know 
> > that nglyphs must be nonnegative. Try putting an 'eassume (0 <= nglyphs);' 
> > before the line in question. That is, if you're sure that nglyphs is 
> > nonnegative: if you're not, GCC has found a real bug here.
> 
> nglyphs is always positive, it comes from nchars of a glyph_string, or
> similar.
> 
> Angelo and Richard, can you please try that eassume and see if it
> shuts up the warning?

I have applied this patch:

--- w32font.c~  2017-09-07 21:49:47.000000000 +0200
+++ w32font.c   2017-09-07 23:14:22.997647400 +0200
@@ -544,6 +544,7 @@
      information.  */

   /* Make array big enough to hold surrogates.  */
+  eassume (0 <= nglyphs);
   wcode = alloca (nglyphs * sizeof (WORD) * 2);
   for (i = 0; i < nglyphs; i++)
     {

..and didn't find warning about w32font.c!

Ciao,
Angelo.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]