Hi,

this is a follow up for the three fix I've sent.
I want to point that such warnings only show when tar is compiled with
-O0, probably because with compiler optimizations the offending code
is elided.

$ make -s WERROR_CFLAGS= CFLAGS=-O0
  CC       buffer.o
In file included from buffer.c:22:
buffer.c: In function ‘_open_archive’:
../lib/system.h:150:18: warning: too many arguments for format
[-Wformat-extra-args]
  150 | #define _(msgid) gettext (msgid)
      |                  ^~~~~~~~~~~~~~~
buffer.c:727:21: note: in expansion of macro ‘_’
  727 |     paxfatal (0, 0, _("Invalid value for record_size"));
      |                     ^
  CC       exclist.o
exclist.c: In function ‘info_attach_exclist’:
exclist.c:83:11: warning: check of ‘dir’ for NULL after already
dereferencing it [-Wanalyzer-deref-before-check]
   83 |       if (faccessat (dir ? dir->fd : chdir_fd, file->name,
F_OK, 0) == 0)
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  ‘info_attach_exclist’: events 1-6
    |
    |   79 |   if (dir->exclude_list)
    |      |      ~~~~^~~~~~~~~~~~~~
    |      |      |   |
    |      |      |   (1) pointer ‘dir’ is dereferenced here
    |      |      (2) following ‘false’ branch...
    |   80 |     return;
    |   81 |   for (file = excfile_head; file; file = file->next)
    |      |        ~~~~~~~~~~~~~~~~~~~  ~~~~
    |      |             |               |
    |      |             |               (4) following ‘true’ branch
(when ‘file’ is non-NULL)...
    |      |             (3) ...to here
    |   82 |     {
    |   83 |       if (faccessat (dir ? dir->fd : chdir_fd,
file->name, F_OK, 0) == 0)
    |      |           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |           |                                        |
    |      |           |                                        (5) ...to here
    |      |           (6) pointer ‘dir’ is checked for NULL here but
it was already dereferenced at (1)
    |
  CC       system.o
system.c: In function ‘sys_exec_info_script’:
system.c:841:12: warning: use of possibly-NULL ‘fp’ where non-null
expected [CWE-690] [-Wanalyzer-possible-null-argument]
  841 |       rc = getline (&buf, &size, fp);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~
  ‘sys_exec_info_script’: events 1-4
    |
    |  829 |   if (pid != 0)
    |      |      ^
    |      |      |
    |      |      (1) following ‘true’ branch (when ‘pid != 0’)...
    |......
    |  835 |       char *buf = NULL;
    |      |             ~~~
    |      |             |
    |      |             (2) ...to here
    |......
    |  840 |       fp = fdopen (p[PREAD], "r");
    |      |            ~~~~~~~~~~~~~~~~~~~~~~
    |      |            |
    |      |            (3) this call could return NULL
    |  841 |       rc = getline (&buf, &size, fp);
    |      |            ~~~~~~~~~~~~~~~~~~~~~~~~~
    |      |            |
    |      |            (4) argument 3 (‘fp’) from (3) could be NULL
where non-null expected
    |
In file included from ../gnu/stdio.h:55,
                 from ../lib/system.h:119,
                 from system.c:18:
/usr/include/stdio.h:707:18: note: argument 3 of ‘getline’ must be non-null
  707 | extern __ssize_t getline (char **__restrict __lineptr,
      |                  ^~~~~~~

Regards,
-- 
Matteo Croce

perl -e 'for($t=0;;$t++){print chr($t*($t>>8|$t>>13)&255)}' |aplay

Reply via email to