Created attachment 15132 [details] Скриншот фрагмента кода Необязательное сравнение с нулем в строке 1278 в условной конструкции if(iconv (icd, &inbuf, &inbufleft, &outbuf, &outbufleft) >= 0), поскольку функция iconv() возвращает беззнаковый тип, то есть результат всегда будет больше или равен нулю. Found by Linux Verification Center (portal.linuxtesting.ru) with SVACE. Author A.Slepykh.
Спасибо за сообщение! Наверное, такое сообщение имеет смысл разобрать с точки зрения того, что там на самом деле авторы имели в виду и вдруг там ошибка. Потому что с формальной точки зрения ничего плохого не происходит: ну истинно всегда и истинно. Компилятор должен же это превратить в ничто, если он знает, что там unsigned, и наверно предупредить из тех же соображений (а вдруг человек имел в виду другое). Однако сейчас при компиляции header.c предупреждений нет: $ fgrep header.c rpm-answer-bug-alt-48312-compile.txt -A1 fgrep: warning: fgrep is obsolescent; using grep -F /bin/sh ../libtool --tag=CC --mode=compile x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -DLOCALEDIR="\"/usr/share/locale\"" -DRPMCONFIGDIR="\"/usr/lib/rpm\"" -DSYSCONFDIR="\"/etc\"" -DLOCALSTATEDIR="\"/var/lib\"" -DLIBRPMALIAS_FILENAME="\"rpmpopt-4.13.0.1\"" -DLIBRPMALIAS_EXECPATH="\"/usr/bin\"" -I/usr/include/beecrypt -DLUA_COMPAT_APIINTCASTS -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -c -o header.lo header.c libtool: compile: x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -DLOCALEDIR=\"/usr/share/locale\" -DRPMCONFIGDIR=\"/usr/lib/rpm\" -DSYSCONFDIR=\"/etc\" -DLOCALSTATEDIR=\"/var/lib\" -DLIBRPMALIAS_FILENAME=\"rpmpopt-4.13.0.1\" -DLIBRPMALIAS_EXECPATH=\"/usr/bin\" -I/usr/include/beecrypt -DLUA_COMPAT_APIINTCASTS -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -fPIC -DPIC -D_REENTRANT -Wall -Wpointer-arith -Wmissing-prototypes -Wstrict-prototypes -fno-strict-aliasing -fstack-protector -Wempty-body -c header.c -fPIC -DPIC -o .libs/header.o make[3]: Leaving directory '/usr/src/RPM/BUILD/rpm-4.13.0.1/lib' Код, вызвавший вопросы, на месте. man-страница говорит, что iconv возвращает size_t, т.е. действительно беззнаковый тип: iconv(3) -- 2023-07-20 -- Linux man-pages 6.05.01 NAME iconv - perform character set conversion LIBRARY Standard C library (libc, -lc) SYNOPSIS #include <iconv.h> size_t iconv(iconv_t cd, char **restrict inbuf, size_t *restrict inbytesleft, char **restrict outbuf, size_t *restrict outbytesleft);