5860f5
From 116a6f7105414819944c3347b12a21d2af4a26de Mon Sep 17 00:00:00 2001
5860f5
From: Florian Festi <ffesti@redhat.com>
5860f5
Date: Mon, 30 Sep 2013 16:08:57 +0200
5860f5
Subject: [PATCH 2/2] Move RPMSIGTAG_SIZE vs PMSIGTAG_LONGSIZE detection to
5860f5
 rpmGenDigest()
5860f5
5860f5
Fixes problem with rpmSign() only using RPMSIGTAG_SIZE
5860f5
Fixes rh#1012595 for now as we are only moving to PMSIGTAG_LONGSIZE when needed
5860f5
---
5860f5
 build/pack.c    |  5 +----
5860f5
 lib/signature.c | 32 ++++++++++++++++----------------
5860f5
 2 files changed, 17 insertions(+), 20 deletions(-)
5860f5
5860f5
diff --git a/build/pack.c b/build/pack.c
5860f5
index 40bf9dc..81eee37 100644
5860f5
--- a/build/pack.c
5860f5
+++ b/build/pack.c
5860f5
@@ -257,7 +257,6 @@ static rpmRC writeRPM(Package pkg, unsigned char ** pkgidp,
5860f5
     int xx;
5860f5
     rpmRC rc = RPMRC_OK;
5860f5
     struct rpmtd_s td;
5860f5
-    rpmTagVal sizetag;
5860f5
     rpmTagVal payloadtag;
5860f5
 
5860f5
     if (pkgidp)
5860f5
@@ -377,13 +376,11 @@ static rpmRC writeRPM(Package pkg, unsigned char ** pkgidp,
5860f5
      * such a package.
5860f5
      */
5860f5
     if (pkg->cpioArchiveSize < UINT32_MAX) {
5860f5
-	sizetag = RPMSIGTAG_SIZE;
5860f5
 	payloadtag = RPMSIGTAG_PAYLOADSIZE;
5860f5
     } else {
5860f5
-	sizetag = RPMSIGTAG_LONGSIZE;
5860f5
 	payloadtag = RPMSIGTAG_LONGARCHIVESIZE;
5860f5
     }
5860f5
-    (void) rpmGenDigest(sig, sigtarget, sizetag);
5860f5
+    (void) rpmGenDigest(sig, sigtarget, RPMSIGTAG_SIZE);
5860f5
     (void) rpmGenDigest(sig, sigtarget, RPMSIGTAG_MD5);
5860f5
 
5860f5
     if (SHA1) {
5860f5
diff --git a/lib/signature.c b/lib/signature.c
5860f5
index 4acce7a..f17e47f 100644
5860f5
--- a/lib/signature.c
5860f5
+++ b/lib/signature.c
5860f5
@@ -347,24 +347,24 @@ int rpmGenDigest(Header sigh, const char * file, rpmTagVal sigTag)
5860f5
     int ret = -1;	/* assume failure. */
5860f5
 
5860f5
     switch (sigTag) {
5860f5
-    case RPMSIGTAG_SIZE: {
5860f5
-	rpm_off_t size;
5860f5
+    case RPMSIGTAG_SIZE:
5860f5
+    case RPMSIGTAG_LONGSIZE:
5860f5
 	if (stat(file, &st) != 0)
5860f5
 	    break;
5860f5
-	size = st.st_size;
5860f5
-	if (!sighdrPut(sigh, sigTag, RPM_INT32_TYPE, &size, 1))
5860f5
-	    break;
5860f5
-	ret = 0;
5860f5
-	} break;
5860f5
-    case RPMSIGTAG_LONGSIZE: {
5860f5
-	rpm_loff_t size;
5860f5
-	if (stat(file, &st) != 0)
5860f5
-	    break;
5860f5
-	size = st.st_size;
5860f5
-	if (!sighdrPut(sigh, sigTag, RPM_INT64_TYPE, &size, 1))
5860f5
-	    break;
5860f5
-	ret = 0;
5860f5
-	} break;
5860f5
+	if (st.st_size>UINT32_MAX || sigTag==RPMSIGTAG_LONGSIZE) {
5860f5
+	    rpm_loff_t size;
5860f5
+	    size = st.st_size;
5860f5
+	    if (!sighdrPut(sigh, RPMSIGTAG_LONGSIZE, RPM_INT64_TYPE, &size, 1))
5860f5
+		break;
5860f5
+	    ret = 0;
5860f5
+	} else {
5860f5
+	    rpm_off_t size;
5860f5
+	    size = st.st_size;
5860f5
+	    if (!sighdrPut(sigh, RPMSIGTAG_SIZE, RPM_INT32_TYPE, &size, 1))
5860f5
+		break;
5860f5
+	    ret = 0;
5860f5
+	}
5860f5
+	break;
5860f5
     case RPMSIGTAG_MD5:
5860f5
 	pktlen = 16;
5860f5
 	pkt = xcalloc(pktlen, sizeof(*pkt));
5860f5
-- 
5860f5
1.8.3.1
5860f5