summaryrefslogtreecommitdiff
path: root/src/indexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/indexer.c')
-rw-r--r--src/indexer.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/indexer.c b/src/indexer.c
index 9cb0cc1b2..54d55dc42 100644
--- a/src/indexer.c
+++ b/src/indexer.c
@@ -22,6 +22,8 @@
extern git_mutex git__mwindow_mutex;
+size_t git_indexer__max_objects = (1ul << 32);
+
#define UINT31_MAX (0x7FFFFFFF)
struct entry {
@@ -557,17 +559,12 @@ int git_indexer_append(git_indexer *idx, const void *data, size_t size, git_tran
idx->nr_objects = ntohl(hdr->hdr_entries);
idx->off = sizeof(struct git_pack_header);
- /* for now, limit to 2^32 objects */
- assert(idx->nr_objects == (size_t)((unsigned int)idx->nr_objects));
- if (idx->nr_objects == (size_t)((unsigned int)idx->nr_objects))
+ if (idx->nr_objects <= git_indexer__max_objects) {
total_objects = (unsigned int)idx->nr_objects;
- else
- total_objects = UINT_MAX;
-#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
- if (total_objects > 4096) {
- total_objects = 4096;
+ } else {
+ giterr_set(GITERR_INDEXER, "too many objects");
+ return -1;
}
-#endif
idx->pack->idx_cache = git_oidmap_alloc();
GITERR_CHECK_ALLOC(idx->pack->idx_cache);