unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument
@ 2021-09-01 10:52 Alexander Kuleshov
  2021-09-01 12:26 ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Kuleshov @ 2021-09-01 10:52 UTC (permalink / raw)
  To: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 420 bytes --]

Hello,

I'm getting:

gtkutil.c: In function ‘xg_item_label_same_p’:
gtkutil.c:2936:54: error: use of NULL where non-null expected
[CWE-476] [-Werror=analyzer-null-argument]
 2936 |                   && ((!old_label && !utf8_label) || strcmp
(utf8_label, old_label) == 0));

error during building of GNU Emacs from master on Fedora 34 with GCC
11.2.1. I've attached a simple fix
for that.

Thank you.

[-- Attachment #2: 0001-Fix-building-with-gcc-11.1.2-and-Wanalyzer-null-argu.patch --]
[-- Type: text/x-patch, Size: 1018 bytes --]

From f4588402aac1c001b93b2df0de344fa8316276cc Mon Sep 17 00:00:00 2001
From: Alexander Kuleshov <kuleshovmail@gmail.com>
Date: Wed, 1 Sep 2021 16:46:19 +0600
Subject: [PATCH] Fix building with gcc 11.1.2 and -Wanalyzer-null-argument
 option

 * src/gtkutil.c (xg_item_label_same_p): Fix a bug where strcmp could
get NULL as argument
---
 src/gtkutil.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gtkutil.c b/src/gtkutil.c
index 313cfc82c2..9ac2a6fea3 100644
--- a/src/gtkutil.c
+++ b/src/gtkutil.c
@@ -2932,8 +2932,8 @@ xg_item_label_same_p (GtkMenuItem *witem, const char *label)
   char *utf8_label = get_utf8_string (label);
   const char *old_label = witem ? xg_get_menu_item_label (witem) : 0;
 
-  bool is_same = (!old_label == !utf8_label
-		  && (!old_label || strcmp (utf8_label, old_label) == 0));
+  bool is_same = (!old_label == !utf8_label)
+		  || ((old_label && utf8_label) && strcmp (utf8_label, old_label) == 0);
 
   if (utf8_label) g_free (utf8_label);
 
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument
  2021-09-01 10:52 Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument Alexander Kuleshov
@ 2021-09-01 12:26 ` Eli Zaretskii
  2021-09-01 12:44   ` Alexander Kuleshov
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2021-09-01 12:26 UTC (permalink / raw)
  To: Alexander Kuleshov; +Cc: emacs-devel

> From: Alexander Kuleshov <kuleshovmail@gmail.com>
> Date: Wed, 1 Sep 2021 16:52:55 +0600
> 
> gtkutil.c: In function ‘xg_item_label_same_p’:
> gtkutil.c:2936:54: error: use of NULL where non-null expected
> [CWE-476] [-Werror=analyzer-null-argument]
>  2936 |                   && ((!old_label && !utf8_label) || strcmp
> (utf8_label, old_label) == 0));

Isn't this a GCC bug?



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument
  2021-09-01 12:26 ` Eli Zaretskii
@ 2021-09-01 12:44   ` Alexander Kuleshov
  2021-09-01 13:36     ` Eli Zaretskii
  0 siblings, 1 reply; 5+ messages in thread
From: Alexander Kuleshov @ 2021-09-01 12:44 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

On Wed, Sep 1, 2021 at 6:26 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Alexander Kuleshov <kuleshovmail@gmail.com>
> > Date: Wed, 1 Sep 2021 16:52:55 +0600
> >
> > gtkutil.c: In function ‘xg_item_label_same_p’:
> > gtkutil.c:2936:54: error: use of NULL where non-null expected
> > [CWE-476] [-Werror=analyzer-null-argument]
> >  2936 |                   && ((!old_label && !utf8_label) || strcmp
> > (utf8_label, old_label) == 0));
>
> Isn't this a GCC bug?

hmm, yes, possibly. And forget about attachment, I was wrong with
`(!old_label == !utf8_label) ||` part.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument
  2021-09-01 12:44   ` Alexander Kuleshov
@ 2021-09-01 13:36     ` Eli Zaretskii
  2021-09-01 17:20       ` Alexander Kuleshov
  0 siblings, 1 reply; 5+ messages in thread
From: Eli Zaretskii @ 2021-09-01 13:36 UTC (permalink / raw)
  To: Alexander Kuleshov; +Cc: emacs-devel

> From: Alexander Kuleshov <kuleshovmail@gmail.com>
> Date: Wed, 1 Sep 2021 18:44:34 +0600
> Cc: emacs-devel <emacs-devel@gnu.org>
> 
> On Wed, Sep 1, 2021 at 6:26 PM Eli Zaretskii <eliz@gnu.org> wrote:
> >
> > > From: Alexander Kuleshov <kuleshovmail@gmail.com>
> > > Date: Wed, 1 Sep 2021 16:52:55 +0600
> > >
> > > gtkutil.c: In function ‘xg_item_label_same_p’:
> > > gtkutil.c:2936:54: error: use of NULL where non-null expected
> > > [CWE-476] [-Werror=analyzer-null-argument]
> > >  2936 |                   && ((!old_label && !utf8_label) || strcmp
> > > (utf8_label, old_label) == 0));
> >
> > Isn't this a GCC bug?
> 
> hmm, yes, possibly. And forget about attachment, I was wrong with
> `(!old_label == !utf8_label) ||` part.

So maybe report it to their Bugzilla?  If it isn't a bug, perhaps they
will explain to us what is wrong with our code?

Thanks.



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument
  2021-09-01 13:36     ` Eli Zaretskii
@ 2021-09-01 17:20       ` Alexander Kuleshov
  0 siblings, 0 replies; 5+ messages in thread
From: Alexander Kuleshov @ 2021-09-01 17:20 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 1404 bytes --]

Yes, I'm trying to get a minimal example to reproduce the same error.

By the way it seems that the previous commit in src/gtkutil.c source
code file fixed similar issue
https://github.com/emacs-mirror/emacs/commit/2337869fbf8b967eb53ee57f978f3751987e43dc#diff-f807e90fbf62c1caf61ddc156d5e165035c18820c2320b701be87f96cb242833R3224

Attached file with the full output, just for the case.

On Wed, Sep 1, 2021 at 7:36 PM Eli Zaretskii <eliz@gnu.org> wrote:
>
> > From: Alexander Kuleshov <kuleshovmail@gmail.com>
> > Date: Wed, 1 Sep 2021 18:44:34 +0600
> > Cc: emacs-devel <emacs-devel@gnu.org>
> >
> > On Wed, Sep 1, 2021 at 6:26 PM Eli Zaretskii <eliz@gnu.org> wrote:
> > >
> > > > From: Alexander Kuleshov <kuleshovmail@gmail.com>
> > > > Date: Wed, 1 Sep 2021 16:52:55 +0600
> > > >
> > > > gtkutil.c: In function ‘xg_item_label_same_p’:
> > > > gtkutil.c:2936:54: error: use of NULL where non-null expected
> > > > [CWE-476] [-Werror=analyzer-null-argument]
> > > >  2936 |                   && ((!old_label && !utf8_label) || strcmp
> > > > (utf8_label, old_label) == 0));
> > >
> > > Isn't this a GCC bug?
> >
> > hmm, yes, possibly. And forget about attachment, I was wrong with
> > `(!old_label == !utf8_label) ||` part.
>
> So maybe report it to their Bugzilla?  If it isn't a bug, perhaps they
> will explain to us what is wrong with our code?
>
> Thanks.

[-- Attachment #2: gtkutil.error.txt --]
[-- Type: text/plain, Size: 6396 bytes --]

gtkutil.c: In function ‘xg_item_label_same_p’:
gtkutil.c:2936:37: error: use of NULL ‘utf8_label’ where non-null expected [CWE-476] [-Werror=analyzer-null-argument]
 2936 |                   && (!old_label || strcmp (utf8_label, old_label) == 0));
      |                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ‘xg_modify_menubar_widgets’: events 1-4
    |
    | 3424 | xg_modify_menubar_widgets (GtkWidget *menubar, struct frame *f,
    |      | ^~~~~~~~~~~~~~~~~~~~~~~~~
    |      | |
    |      | (1) entry to ‘xg_modify_menubar_widgets’
    |......
    | 3432 |   if (! list) return;
    |      |      ~
    |      |      |
    |      |      (2) following ‘false’ branch...
    | 3433 | 
    | 3434 |   cl_data = g_object_get_data (G_OBJECT (menubar), XG_FRAME_DATA);
    |      |   ~~~~~~~
    |      |   |
    |      |   (3) ...to here
    | 3435 | 
    | 3436 |   xg_update_menubar (menubar, f, &list, list, 0, val->contents,
    |      |   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |   |
    |      |   (4) calling ‘xg_update_menubar’ from ‘xg_modify_menubar_widgets’
    | 3437 |                      select_cb, deactivate_cb, highlight_cb, cl_data);
    |      |                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |
    +--> ‘xg_update_menubar’: events 5-12
           |
           | 2972 | xg_update_menubar (GtkWidget *menubar,
           |      | ^~~~~~~~~~~~~~~~~
           |      | |
           |      | (5) entry to ‘xg_update_menubar’
           |......
           | 2983 |   if (! iter && ! val)
           |      |      ~
           |      |      |
           |      |      (6) following ‘false’ branch...
           | 2984 |     return;
           | 2985 |   else if (iter && ! val)
           |      |        ~~ ~
           |      |        |  |
           |      |        |  (8) following ‘false’ branch...
           |      |        (7) ...to here
           |......
           | 2998 |   else if (! iter && val)
           |      |        ~~ ~
           |      |        |  |
           |      |        |  (10) following ‘false’ branch...
           |      |        (9) ...to here
           |......
           | 3009 |   else if (xg_item_label_same_p (GTK_MENU_ITEM (iter->data), val->name))
           |      |        ~~  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
           |      |        |   |
           |      |        |   (12) calling ‘xg_item_label_same_p’ from ‘xg_update_menubar’
           |      |        (11) ...to here
           |
           +--> ‘xg_item_label_same_p’: events 13-14
                  |
                  | 2930 | xg_item_label_same_p (GtkMenuItem *witem, const char *label)
                  |      | ^~~~~~~~~~~~~~~~~~~~
                  |      | |
                  |      | (13) entry to ‘xg_item_label_same_p’
                  | 2931 | {
                  | 2932 |   char *utf8_label = get_utf8_string (label);
                  |      |                      ~~~~~~~~~~~~~~~~~~~~~~~
                  |      |                      |
                  |      |                      (14) calling ‘get_utf8_string’ from ‘xg_item_label_same_p’
                  |
                  +--> ‘get_utf8_string’: events 15-16
                         |
                         |  514 | get_utf8_string (const char *str)
                         |      | ^~~~~~~~~~~~~~~
                         |      | |
                         |      | (15) entry to ‘get_utf8_string’
                         |......
                         |  518 |   if (!str) return NULL;
                         |      |      ~
                         |      |      |
                         |      |      (16) following ‘true’ branch (when ‘str’ is NULL)...
                         |
                       ‘get_utf8_string’: event 17
                         |
                         |cc1:
                         | (17): ...to here
                         |
                  <------+
                  |
                ‘xg_item_label_same_p’: events 18-25
                  |
                  | 2932 |   char *utf8_label = get_utf8_string (label);
                  |      |                      ^~~~~~~~~~~~~~~~~~~~~~~
                  |      |                      |
                  |      |                      (18) returning to ‘xg_item_label_same_p’ from ‘get_utf8_string’
                  | 2933 |   const char *old_label = witem ? xg_get_menu_item_label (witem) : 0;
                  |      |                           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |                                   |                              |
                  |      |                                   |                              (19) following ‘true’ branch (when ‘witem’ is non-NULL)...
                  |      |                                   (20) ...to here
                  | 2934 | 
                  | 2935 |   bool is_same = (!old_label == !utf8_label
                  |      |                  ~~~~~~~~~~~~~~~~~~~~~~~~~~
                  | 2936 |                   && (!old_label || strcmp (utf8_label, old_label) == 0));
                  |      |                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  |      |                   |                 |
                  |      |                   |                 (24) ...to here
                  |      |                   |                 (25) argument 1 (‘utf8_label’) NULL where non-null expected
                  |      |                   (21) following ‘true’ branch...
                  |      |                   (22) ...to here
                  |      |                   (23) following ‘false’ branch...
                  |
In file included from ../lib/string.h:41,
                 from lisp.h:29,
                 from gtkutil.c:36:
/usr/include/string.h:140:12: note: argument 1 of ‘strcmp’ must be non-null
  140 | extern int strcmp (const char *__s1, const char *__s2)
      |            ^~~~~~
cc1: all warnings being treated as errors
make[1]: *** [Makefile:386: gtkutil.o] Error 1
make[1]: Leaving directory '/home/alex/disk/dev/emacs/src'
make: *** [Makefile:443: src] Error 2

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2021-09-01 17:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-01 10:52 Adjust gtkutil.c to build with gcc (GCC) 11.2.1 with -Wanalyzer-null-argument Alexander Kuleshov
2021-09-01 12:26 ` Eli Zaretskii
2021-09-01 12:44   ` Alexander Kuleshov
2021-09-01 13:36     ` Eli Zaretskii
2021-09-01 17:20       ` Alexander Kuleshov

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).