richardphibel / rpms / rpm

Forked from rpms/rpm 2 years ago
Clone
3791cf
From 89e6317c75b494905590903fadbfdc3c8d31e2b8 Mon Sep 17 00:00:00 2001
3791cf
From: Stefan Berger <stefanb@us.ibm.com>
3791cf
Date: Fri, 29 Apr 2016 07:09:49 -0400
3791cf
Subject: [PATCH] Extend header size to 256MB due to file signatures
3791cf
3791cf
Extend the header size to 256MB in case an RPM has a lot of files
3791cf
and the file signatures do not fit within the current limit of 16MB.
3791cf
3791cf
An example for an RPM with many files is kcbench-data-4.0. It contains
3791cf
more than 52000 files. With each signature with a 2048 bit key requiring
3791cf
256 bytes plus a preamble, its representation in text from, and other
3791cf
overhead, the size of the header (index length and data length) exceeds
3791cf
32Mb.
3791cf
3791cf
If this particular RPM's files have been signed using this patch, older
3791cf
versions of the rpm tool will report the header being too large. So this
3791cf
failure is expected then.
3791cf
3791cf
By setting the limit to 256MB we create a lot of room for the future.
3791cf
3791cf
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
3791cf
---
3791cf
 lib/header.c          | 2 +-
3791cf
 lib/header_internal.h | 5 +++--
3791cf
 2 files changed, 4 insertions(+), 3 deletions(-)
3791cf
3791cf
diff --git a/lib/header.c b/lib/header.c
3791cf
index 81f2038..7f7c115 100644
3791cf
--- a/lib/header.c
3791cf
+++ b/lib/header.c
3791cf
@@ -99,7 +99,7 @@ struct headerToken_s {
3791cf
 /** \ingroup header
3791cf
  * Maximum no. of bytes permitted in a header.
3791cf
  */
3791cf
-static const size_t headerMaxbytes = (32*1024*1024);
3791cf
+static const size_t headerMaxbytes = (256*1024*1024);
3791cf
 
3791cf
 #define	INDEX_MALLOC_SIZE	8
3791cf
 
3791cf
diff --git a/lib/header_internal.h b/lib/header_internal.h
3791cf
index bbe2097..aed3977 100644
3791cf
--- a/lib/header_internal.h
3791cf
+++ b/lib/header_internal.h
3791cf
@@ -45,9 +45,10 @@ struct indexEntry_s {
3791cf
 
3791cf
 /**
3791cf
  * Sanity check on data size and/or offset and/or count.
3791cf
- * This check imposes a limit of 16 MB, more than enough.
3791cf
+ * This check imposes a limit of 256 MB -- file signatures
3791cf
+ * may require a lot of space in the header.
3791cf
  */
3791cf
-#define HEADER_DATA_MAX 0x00ffffff
3791cf
+#define HEADER_DATA_MAX 0x0fffffff
3791cf
 #define hdrchkData(_nbytes) ((_nbytes) & (~HEADER_DATA_MAX))
3791cf
 
3791cf
 /**
3791cf
-- 
3791cf
2.9.5
3791cf