diff options
context:
space:
mode:
Diffstat (limited to 'source/ui-plain.c')
-rw-r--r--source/ui-plain.c8
1 file changed, 8 insertions, 0 deletions
diff --git a/source/ui-plain.c b/source/ui-plain.c
index c041711..8486fa4 100644
--- a/source/ui-plain.c
+++ b/source/ui-plain.c
@@ -30,6 +30,14 @@ static int print_object(const struct object_id *oid, const char *path)
return 1;
}
+ /* Reject an oversized object before reading it whole into memory. */
+ if (ctx.cfg.max_blob_size && size / 1024 > (unsigned long)ctx.cfg.max_blob_size) {
+ cgit_print_error_page(413, "Too large",
+ "Object size (%luKB) exceeds limit (%dKB)",
+ size / 1024, ctx.cfg.max_blob_size);
+ return 1;
+ }
+
buf = odb_read_object(the_repository->objects, oid, &type, &size);
if (!buf) {
cgit_print_error_page(404, "Not found", "Not found");