zipinfo prints random garbage (and sometime crashes) when showing the usage:
run 1:
miscellaneous options:
-h print header line -t print totals for listed files or for all
-z print zipfile comment -T? print file times in sortable decimal format
?-C be case-insensitive 4l?????```??`????????????????????????????????
run 2:
miscellaneous options:
-h print header line -t print totals for listed files or for all
-z print zipfile comment `-T? print file times in sortable decimal format
?-C? be case-insensitive (null) -x exclude filenames that follow from listing
run 3:
miscellaneous options:
-h print header line -t print totals for listed files or for all
-z print zipfile comment ?-T? print file times in sortable decimal format
-Cv be case-insensitive 20 April 2009 -x exclude filenames that follow from listing
run 4: segmentation fault
This happens because four '%c' modifiers are passed to sprintf, without
any corresponding argument.
This obviously generates a long list of compiler warnings, which are
ignored:
In file included from unzip.h:720,
from unzip.c:68:
unzip.c: In function ‘usage’:
unzpriv.h:1009:45: warning: format ‘%c’ expects argument of type ‘int’, but argument 3 has type ‘char *’ [-Wformat=]
1009 | # define LoadFarString(x) (char *)(x)
| ^
unzpriv.h:2728:61: note: in definition of macro ‘Info’
2728 | (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
| ^~~~~~~~
unzip.c:2133:43: note: in expansion of macro ‘LoadFarString’
2133 | Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
| ^~~~~~~~~~~~~
unzpriv.h:1009:45: warning: format ‘%c’ expects a matching ‘int’ argument [-Wformat=]
1009 | # define LoadFarString(x) (char *)(x)
| ^
unzpriv.h:2728:61: note: in definition of macro ‘Info’
2728 | (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
| ^~~~~~~~
unzip.c:2133:43: note: in expansion of macro ‘LoadFarString’
2133 | Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
| ^~~~~~~~~~~~~
unzpriv.h:1009:45: warning: format ‘%c’ expects a matching ‘int’ argument [-Wformat=]
1009 | # define LoadFarString(x) (char *)(x)
| ^
unzpriv.h:2728:61: note: in definition of macro ‘Info’
2728 | (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
| ^~~~~~~~
unzip.c:2133:43: note: in expansion of macro ‘LoadFarString’
2133 | Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
| ^~~~~~~~~~~~~
unzpriv.h:1009:45: warning: format ‘%c’ expects a matching ‘int’ argument [-Wformat=]
1009 | # define LoadFarString(x) (char *)(x)
| ^
unzpriv.h:2728:61: note: in definition of macro ‘Info’
2728 | (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
| ^~~~~~~~
unzip.c:2133:43: note: in expansion of macro ‘LoadFarString’
2133 | Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
| ^~~~~~~~~~~~~
unzpriv.h:1009:45: warning: format ‘%s’ expects a matching ‘char *’ argument [-Wformat=]
1009 | # define LoadFarString(x) (char *)(x)
| ^
unzpriv.h:2728:61: note: in definition of macro ‘Info’
2728 | (*G.message)((zvoid *)&G, (uch *)(buf), (ulg)sprintf sprf_arg, (flag))
| ^~~~~~~~
unzip.c:2133:43: note: in expansion of macro ‘LoadFarString’
2133 | Info(slide, flag, ((char *)slide, LoadFarString(ZipInfoUsageLine3),
| ^~~~~~~~~~~~~
Fix this by removing the '%c' modifiers.
Resolves: RHEL-60054
Signed-off-by: Matteo Croce <teknoraver@meta.com>