Bug 48312 (worried-in-unused-rpmbuild-rpmfcClassify)
| Summary: | Разыменование нуля в rpm-4.13.0.1/build/rpmfc.c | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | e.bykhanova <e.bykhanova> | ||||||
| Component: | rpm | Assignee: | Gleb F-Malinovskiy <glebfm> | ||||||
| Status: | RESOLVED LATER | QA Contact: | qa-sisyphus | ||||||
| Severity: | normal | ||||||||
| Priority: | P5 | CC: | antohami, arseny, glebfm, imz, rider | ||||||
| Version: | unstable | ||||||||
| Hardware: | x86_64 | ||||||||
| OS: | Linux | ||||||||
| Attachments: |
|
||||||||
Created attachment 14961 [details]
Скриншот фрагмента кода
Спасибо за сообщение! Суть ошибки ясна.
Тут, конечно, по месту в исходниках сразу видно, что это часть rpmbuild, и у нас её представляет пакет rpm-build, который собирается из других исходников, на основе совсем другой версии, более старой.
Код с ошибкой никак не используется. Это предположительно. Позже в ответе разберусь больше с его использованием.
Есть ли смысл патчить код, который (предположительно) никак не используется? -- Не думаю. Если и когда rpmbuild-часть станет задействована в ALT, то будет переработана с ALT-овскими изменениями из rpm-build, и скорее всего на основе уже другой апстримной версии, которая будет иметься к тому времени. (Поэтому resolved as LATER.)
Остаётся ещё вопрос: Есть ли в rpm-build (другом пакете) такой код?
(Стоит поверить. Мне кажется, нет. Это более новая фича тут.)
Чтобы изучить, какой код реально используется в собранном в ALT пакете, делаю так:
смотрю вид кода при сборке: gear -t gears/sisyphus --hasher -- hsh --apt-conf=/home/imz/.hasher/sisyphus/apt.conf ~/hasher/
(к сожалению, не получается сказать hsh --rpmbuild-args='-bp', чтобы для этой цели -- анализа исходников -- только подготовить исходники (выполнить стадию %prep): такая опция не имеет задуманного эффекта при передаче hsh)
Файл ~/hasher/chroot/usr/src/RPM/BUILD/rpm-4.13.0.1/build/rpmfc.c присутствует. Что ж, выходит, build/-часть исходников не удаляется перед сборкой, что позволило бы нам "доказать", что они никак не задействованы. Функция rpmfcClassify и ошибка в ней на месте. Всё на месте после (в общем случае) приложения патчей и удаления ненужных исходников для сборки.
В выводе hsh (команда выше) посмотрим, используется ли файл rpmfc.c для компиляции. (Наверное, для более точного анализа исходников было бы хорошо именно через обёртку gcc или т.п. фиксировать, какие исходники используются; например, давая на анализ результат cpp.) Упоминания rpmfc:
/usr/bin/ginstall -c -m 644 ./build/rpmfc.h include/rpm/rpmfc.h
/bin/sh ../libtool --tag=CC --mode=compile x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -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 rpmfc.lo rpmfc.c
libtool: compile: x86_64-alt-linux-gcc -DHAVE_CONFIG_H -I.. -I.. -I../include/ -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 rpmfc.c -fPIC -DPIC -o .libs/rpmfc.o
/bin/sh ../libtool --tag=CC --mode=link x86_64-alt-linux-gcc -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 -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread
libtool: link: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/lib/.libs -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/rpmio/.libs ../lib/.libs/librpm.so ../rpmio/.libs/librpmio.so -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1
/bin/sh ../libtool --tag=CC --mode=link x86_64-alt-linux-gcc -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 -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread
libtool: link: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/lib/.libs -Wl,-rpath -Wl,/usr/src/RPM/BUILD/rpm-4.13.0.1/rpmio/.libs ../lib/.libs/librpm.so ../rpmio/.libs/librpmio.so -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1
libtool: install: (cd /usr/src/RPM/BUILD/rpm-4.13.0.1/build; /bin/sh "/usr/src/RPM/BUILD/rpm-4.13.0.1/libtool" --tag CC --mode=relink x86_64-alt-linux-gcc -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 -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -inst-prefix-dir /usr/src/tmp/rpm-buildroot)
libtool: relink: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -L/usr/src/tmp/rpm-buildroot/usr/lib64 -L/usr/lib64 -lrpm -lrpmio -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1
/usr/libexec/rpm-build/install -p -m 644 rpmio/argv.h rpmio/rpmio.h rpmio/rpmurl.h rpmio/rpmmacro.h rpmio/rpmlog.h rpmio/rpmpgp.h rpmio/rpmsq.h rpmio/rpmstring.h rpmio/rpmstrpool.h rpmio/rpmsw.h rpmio/rpmfileutil.h rpmio/rpmutil.h rpmio/rpmkeyring.h rpmio/rpmbase64.h lib/header.h lib/rpmdb.h lib/rpmcallback.h lib/rpmcli.h lib/rpmlib.h lib/rpmds.h lib/rpmfi.h lib/rpmfiles.h lib/rpmlegacy.h lib/rpmpol.h lib/rpmps.h lib/rpmprob.h lib/rpmtag.h lib/rpmtd.h lib/rpmte.h lib/rpmts.h lib/rpmtypes.h lib/rpmvf.h lib/rpmarchive.h lib/rpmvercmp.h sign/rpmsign.h build/rpmbuild.h build/rpmfc.h build/rpmspec.h '/usr/src/tmp/rpm-buildroot/usr/include/rpm'
libtool: install: (cd /usr/src/RPM/BUILD/rpm-4.13.0.1/build; /bin/sh "/usr/src/RPM/BUILD/rpm-4.13.0.1/libtool" --tag CC --mode=relink x86_64-alt-linux-gcc -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 -version-info 7:1:0 -o librpmbuild.la -rpath /usr/lib64 build.lo expression.lo files.lo misc.lo pack.lo parseBuildInstallClean.lo parseChangelog.lo parseDescription.lo parseFiles.lo parsePreamble.lo parsePrep.lo parseReqs.lo parseScript.lo parseSpec.lo reqprov.lo rpmfc.lo spec.lo parsePolicies.lo policies.lo ../lib/librpm.la ../rpmio/librpmio.la ../misc/libmisc.la -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -inst-prefix-dir /usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing)
libtool: relink: x86_64-alt-linux-gcc -shared -fPIC -DPIC .libs/build.o .libs/expression.o .libs/files.o .libs/misc.o .libs/pack.o .libs/parseBuildInstallClean.o .libs/parseChangelog.o .libs/parseDescription.o .libs/parseFiles.o .libs/parsePreamble.o .libs/parsePrep.o .libs/parseReqs.o .libs/parseScript.o .libs/parseSpec.o .libs/reqprov.o .libs/rpmfc.o .libs/spec.o .libs/parsePolicies.o .libs/policies.o -Wl,--whole-archive ../misc/.libs/libmisc.a -Wl,--no-whole-archive -L/usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing/usr/lib64 -L/usr/lib64 -lrpm -lrpmio -lcap -lpopt -lmagic -lsha1detectcoll -lpthread -pipe -frecord-gcc-switches -Wall -g -O2 -flto=auto -DLUA_COMPAT_APIINTCASTS -g -O2 -flto=auto -fstack-protector -Wl,-soname -Wl,librpmbuild.so.7 -o .libs/librpmbuild.so.7.0.1
/usr/bin/ginstall -c -m 644 rpmio/argv.h rpmio/rpmio.h rpmio/rpmurl.h rpmio/rpmmacro.h rpmio/rpmlog.h rpmio/rpmpgp.h rpmio/rpmsq.h rpmio/rpmstring.h rpmio/rpmstrpool.h rpmio/rpmsw.h rpmio/rpmfileutil.h rpmio/rpmutil.h rpmio/rpmkeyring.h rpmio/rpmbase64.h lib/header.h lib/rpmdb.h lib/rpmcallback.h lib/rpmcli.h lib/rpmlib.h lib/rpmds.h lib/rpmfi.h lib/rpmfiles.h lib/rpmlegacy.h lib/rpmpol.h lib/rpmps.h lib/rpmprob.h lib/rpmtag.h lib/rpmtd.h lib/rpmte.h lib/rpmts.h lib/rpmtypes.h lib/rpmvf.h lib/rpmarchive.h lib/rpmvercmp.h sign/rpmsign.h build/rpmbuild.h build/rpmfc.h build/rpmspec.h '/usr/src/RPM/BUILD/rpm-4.13.0.1/tests/testing/usr/include/rpm'
Оно попадает в библиотеку librpmbuild. Для чего используется эта библиотека? Кому-то нужен пакет librpmbuild7?
Ограничусь только ответом на второй вопрос, про зависимость на пакет.
$ ~/hasher/aptbox/apt-cache whatdepends librpmbuild7
librpmbuild7-4.13.0.1-alt44@1776845801
librpmbuild7-debuginfo-4.13.0.1-alt44@1776845801
Depends: librpmbuild7 = 4.13.0.1-alt44
dnf5-plugins-5.4.0.0-alt1:sisyphus+411009.2.6.1@1773309762
Depends: <librpmbuild.so.7()(64bit)>
librpmbuild7-4.13.0.1-alt44@1776845801
$
(Какой-то короткий вывод, если сравнить с showpkg. Наверное, ошибка в whatdepends.)
$ ~/hasher/aptbox/apt-cache showpkg librpmbuild7
Package: librpmbuild7
Versions:
4.13.0.1-alt44@1776845801(/tmp/.private/imz/hasher/repo/x86_64/RPMS.hasher/)
4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476(/tmp/.private/imz/hasher/aptbox/var/lib/apt/lists/../../../../../apt-lists/ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic)(/tmp/.private/imz/hasher/aptbox/var/lib/rpm/Packages)
Reverse Depends:
rpmspec,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1
python3-module-rpm,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1
python-module-rpm,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1
librpm-devel,librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1
rpmspec,librpmbuild7 4.13.0.1-alt44
librpm-devel,librpmbuild7 4.13.0.1-alt44
python-module-rpm,librpmbuild7 4.13.0.1-alt44
python3-module-rpm,librpmbuild7 4.13.0.1-alt44
librpmbuild7-debuginfo,librpmbuild7 4.13.0.1-alt44
Dependencies:
4.13.0.1-alt44@1776845801 - libc.so.6(GLIBC_2.15)(64bit) (0 (null)) libcap.so.2()(64bit) (2 set:kirQLhjUBY0) libmagic.so.1()(64bit) (2 set:ifeePaApd4op02) libpopt.so.0()(64bit) (2 set:jftck0pY4jRJWvaCunRMZrjSd) librpm7 (5 4.13.0.1-alt44)
4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476 - libc.so.6(GLIBC_2.15)(64bit) (0 (null)) libcap.so.2()(64bit) (2 set:kirQLhjUBY0) libmagic.so.1()(64bit) (2 set:ifeePaApd4op02) libpopt.so.0()(64bit) (2 set:jftck0pY4jRJWvaCunRMZrjSd) librpm7 (5 4.13.0.1-alt44:sisyphus+405580.200.3.1)
Provides:
4.13.0.1-alt44@1776845801 - librpmbuild7 librpmbuild.so.7()(64bit)
4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476 - librpmbuild7 librpmbuild.so.7()(64bit)
Reverse Provides:
librpmbuild7 4.13.0.1-alt44:sisyphus+405580.200.3.1@1768927476
librpmbuild7 4.13.0.1-alt44@1776845801
$
Из реально используемого тут только rpmspec. (Остальное просто bindings на всё подряд.)
Используется ли функция rpmfcClassify, которая с ошибкой?
git -P grep -nH -Fe rpmfcClassify
build/rpmfc.c:1002:rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode)
build/rpmfc.c:1376: rc = rpmfcClassify(fc, pkg->dpaths, fmode);
build/rpmfc.h:86:rpmRC rpmfcClassify(rpmfc fc, ARGV_t argv, rpm_mode_t * fmode);
tools/rpmdeps.c:106: if (rpmfcClassify(fc, av, NULL) || rpmfcApply(fc))
Только в утилите rpmdeps. В rpmspec нет.
Пакуется ли rpmdeps и может ли случиться, что оно используется?
$ grep -Fe 'rpmdeps' /ALT/Sisyphus/{noarch,x86_64}/base/contents_index
/ALT/Sisyphus/x86_64/base/contents_index:/usr/lib/eepm-rpm/rpmdeps eepm-rpm-build
$
Есть утилита того же происхождения в другом пакете. У него свои исходники со своими ошиками (есть ли она там, я не знаю). eepm-rpm-build
Можно перенаправить внимание по поводу этой найденной ошибки в апстрим https://github.com/rpm-software-management/rpm (наверно, уже нет); в пакет eepm-rpm-build ; в пакет rpm-build (наверно, ещё нет в той старой версии: rpmfcClassify для классификации файлов должен быть для замены механизма find-requires/provides на шелле, а в той версии так).
(Ответ для Ivan Zakharyaschev на комментарий #2) > $ ~/hasher/aptbox/apt-cache whatdepends librpmbuild7 > librpmbuild7-4.13.0.1-alt44@1776845801 > librpmbuild7-debuginfo-4.13.0.1-alt44@1776845801 > Depends: librpmbuild7 = 4.13.0.1-alt44 > dnf5-plugins-5.4.0.0-alt1:sisyphus+411009.2.6.1@1773309762 > Depends: <librpmbuild.so.7()(64bit)> > librpmbuild7-4.13.0.1-alt44@1776845801 > $ > > (Какой-то короткий вывод, если сравнить с showpkg. Наверное, ошибка в > whatdepends.) > > $ ~/hasher/aptbox/apt-cache showpkg librpmbuild7 > Package: librpmbuild7 https://bugzilla.altlinux.org/58830 |

Description
e.bykhanova@fobos-nt.ru 2023-11-02 20:21:49 MSK