[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