[packages/rpm/dev-5.4.17] - added forgotten elf-entsize patch (don't die on ELF .go files from guile 2.2) - fixed warnings in
qboosh
qboosh at pld-linux.org
Sat Mar 9 21:19:17 CET 2019
commit b48a27c49fb608004ef69db9c0b3f30cc73f35c5
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sat Mar 9 21:24:59 2019 +0100
- added forgotten elf-entsize patch (don't die on ELF .go files from guile 2.2)
- fixed warnings in rpmdb_reset
- release 0.15
rpm-elf-entsize.patch | 44 ++++++++++++++++++++++++++++++++++++++++++++
rpm.spec | 6 +++---
rpmdb_reset.c | 7 ++-----
3 files changed, 49 insertions(+), 8 deletions(-)
---
diff --git a/rpm.spec b/rpm.spec
index 813910d..5ab0ccc 100644
--- a/rpm.spec
+++ b/rpm.spec
@@ -58,7 +58,7 @@ Summary(ru.UTF-8): Менеджер пакетов от RPM
Summary(uk.UTF-8): Менеджер пакетів від RPM
Name: rpm
Version: 5.4.17
-Release: 0.14
+Release: 0.15
License: LGPL v2.1
Group: Base
# http://rpm5.org/files/rpm/rpm-5.4/rpm-5.4.17-0.20160512.src.rpm
@@ -173,7 +173,7 @@ Patch75: %{name}-double_check_file_deps.patch
Patch77: %{name}-lua-expat.patch
Patch78: %{name}-double_check_unpackaged_subdirs.patch
Patch79: %{name}-rpmspec.patch
-
+Patch80: %{name}-elf-entsize.patch
Patch81: %{name}-perl-magic.patch
Patch82: %{name}-5.4.15-use-DSA-sig.patch
Patch83: %{name}-ignore-missing-macro-files.patch
@@ -958,7 +958,6 @@ cd -
%patch77 -p1
%patch78 -p1
%patch79 -p1
-
%patch81 -p0
%patch82 -p1
%patch84 -p1
@@ -969,6 +968,7 @@ cd -
%patch89 -p1
%patch90 -p1
%patch91 -p1
+%patch80 -p1
%patch1000 -p1
%patch1001 -p1
diff --git a/rpm-elf-entsize.patch b/rpm-elf-entsize.patch
new file mode 100644
index 0000000..1956260
--- /dev/null
+++ b/rpm-elf-entsize.patch
@@ -0,0 +1,44 @@
+Avoid SIGFPE on semi-ELF files, like guile cache (*.go).
+--- rpm-5.4.17/rpmdb/legacy.c.orig 2019-02-14 18:13:07.961620012 +0100
++++ rpm-5.4.17/rpmdb/legacy.c 2019-02-14 19:54:24.235368679 +0100
+@@ -116,7 +116,7 @@
+ if (shdr.sh_type != SHT_DYNAMIC)
+ continue;
+ while (!bingo && (data = elf_getdata (scn, data)) != NULL) {
+- unsigned maxndx = (unsigned) (data->d_size / shdr.sh_entsize);
++ unsigned maxndx = (shdr.sh_entsize == 0) ? 0 : (unsigned) (data->d_size / shdr.sh_entsize);
+ unsigned ndx;
+
+ for (ndx = 0; ndx < maxndx; ++ndx) {
+--- rpm-5.4.17/lib/rpmds.c.orig 2019-02-14 21:51:17.514041154 +0100
++++ rpm-5.4.17/lib/rpmds.c 2019-02-14 21:51:20.570691261 +0100
+@@ -2933,6 +2933,11 @@
+ * @param isX32 is this an X32 symbol?
+ */
+ #if defined(HAVE_GELF_H) && defined(HAVE_LIBELF) && !defined(__FreeBSD__)
++static int getShdrEntries(GElf_Shdr *shdr)
++{
++ return shdr->sh_entsize == 0 ? 0 : ((int)(shdr->sh_size / shdr->sh_entsize));
++}
++
+ static char * sonameDep(/*@returned@*/ char * t, const char * s, int isElf64, int isX32)
+ /*@modifies t @*/
+ {
+@@ -3195,7 +3200,7 @@
+ case SHT_DYNAMIC:
+ data = NULL;
+ while ((data = elf_getdata (scn, data)) != NULL) {
+- for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
++ for (cnt = 0; cnt < getShdrEntries(shdr); ++cnt) {
+ dyn = gelf_getdyn (data, cnt, &dyn_mem);
+ if (dyn == NULL)
+ /*@innerbreak@*/ break;
+@@ -3436,7 +3441,7 @@
+ case SHT_DYNAMIC:
+ data = NULL;
+ while ((data = elf_getdata (scn, data)) != NULL) {
+- for (cnt = 0; cnt < (int)(shdr->sh_size / shdr->sh_entsize); ++cnt) {
++ for (cnt = 0; cnt < getShdrEntries(shdr); ++cnt) {
+ dyn = gelf_getdyn (data, cnt, &dyn_mem);
+ if (dyn == NULL)
+ /*@innerbreak@*/ break;
diff --git a/rpmdb_reset.c b/rpmdb_reset.c
index efa1707..6d18bef 100644
--- a/rpmdb_reset.c
+++ b/rpmdb_reset.c
@@ -2,6 +2,7 @@
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <db.h>
@@ -36,10 +37,8 @@ main(argc, argv)
enum { NOTSET, FILEID_RESET, LSN_RESET, STANDARD_LOAD } mode;
extern char *optarg;
extern int optind;
- DBTYPE dbtype;
DB_ENV *dbenv;
LDG ldg;
- u_int ldf;
int ch, exitval, ret;
if ((exitval = version_check()) != 0)
@@ -55,9 +54,7 @@ main(argc, argv)
ldg.passwd = NULL;
mode = NOTSET;
- ldf = 0;
exitval = 0;
- dbtype = DB_UNKNOWN;
/*
* There are two modes for db_load: -r and everything else. The -r
@@ -112,7 +109,7 @@ main(argc, argv)
case LSN_RESET:
exitval = dbenv->lsn_reset(dbenv, argv[0], 0);
break;
- case NOTSET:
+ default:
break;
}
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/rpm.git/commitdiff/b48a27c49fb608004ef69db9c0b3f30cc73f35c5
More information about the pld-cvs-commit
mailing list