File sigreserved.diff of Package rpm.33599

--- sign/rpmgensig.c.orig	2024-02-23 13:26:21.461857566 +0000
+++ sign/rpmgensig.c	2024-02-27 15:31:47.194980154 +0000
@@ -762,27 +762,20 @@ static int rpmSign(const char *rpm, int
 	res = -1;
     }
 
-    /* Try to make new signature smaller to have size of original signature */
-    rpmtdReset(&utd);
+    /* Adjust reserved size for added/removed signatures */
     if (headerGet(sigh, RPMSIGTAG_RESERVEDSPACE, &utd, HEADERGET_MINMEM)) {
-	int diff;
-	int count;
-	char *reservedSpace = NULL;
-
-	count = utd.count;
-	diff = headerSizeof(sigh, HEADER_MAGIC_YES) - origSigSize;
+	int diff = headerSizeof(sigh, HEADER_MAGIC_YES) - origSigSize;
 
-	if (diff < count) {
-	    reservedSpace = xcalloc(count - diff, sizeof(char));
-	    headerDel(sigh, RPMSIGTAG_RESERVEDSPACE);
-	    rpmtdReset(&utd);
-	    utd.tag = RPMSIGTAG_RESERVEDSPACE;
-	    utd.count = count - diff;
-	    utd.type = RPM_BIN_TYPE;
-	    utd.data = reservedSpace;
-	    headerPut(sigh, &utd, HEADERPUT_DEFAULT);
-	    free(reservedSpace);
-	    insSig = 1;
+	/* diff can be zero if nothing was added or removed */
+	if (diff) {
+	    utd.count -= diff;
+	    if (utd.count > 0 && utd.count < origSigSize) {
+		char *zeros = xcalloc(utd.count, sizeof(*zeros));
+		utd.data = zeros;
+		headerMod(sigh, &utd);
+		insSig = 1;
+		free(zeros);
+	    }
 	}
     }
 
openSUSE Build Service is sponsored by