Diff options
| author | Bryce Kwon <bryce@brycekwon.com> | |
|---|---|---|
| committer | Bryce Kwon <bryce@brycekwon.com> | |
| commit | ||
| parent | ||
| tree | ||
| download | ||
Check max-blob-size up front and default to 10 MB
Only the tree view honoured the limit, and only after loading the whole
object. The default moves from unlimited to 10 MB so a fresh install
never buffers a huge object whole. Zero still turns the limit off.
Diffstat (limited to 'source/ui-plain.c')
| -rw-r--r-- | source/ui-plain.c | 8 |
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"); |
