diff options
author | June McEnroe <june@causal.agency> | 2019-12-18 21:30:12 +0000 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2022-12-19 14:14:05 +0000 |
commit | cc6d9cc7fc010db9be6c2d90fd054fb2d189d629 (patch) | |
tree | 667023ef4d1976928d7055e441efc3afc789e375 | |
parent | e10159691e799d0f31f5314c73f47511cc974f46 (diff) | |
download | cgit-cc6d9cc7fc010db9be6c2d90fd054fb2d189d629.tar cgit-cc6d9cc7fc010db9be6c2d90fd054fb2d189d629.tar.gz cgit-cc6d9cc7fc010db9be6c2d90fd054fb2d189d629.zip |
ui-tree,ui-blame: bail from blame if blob is binary
This avoids piping binary blobs through the source-filter. Also prevent
robots from crawling it, since it's expensive.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | robots.txt | 1 | ||||
-rw-r--r-- | ui-blame.c | 4 | ||||
-rw-r--r-- | ui-tree.c | 6 |
3 files changed, 9 insertions, 2 deletions
@@ -1,3 +1,4 @@ User-agent: * Disallow: /*/snapshot/* +Disallow: /*/blame/* Allow: / @@ -152,6 +152,10 @@ static void print_object(const struct object_id *oid, const char *path, cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path); html(")\n"); + if (buffer_is_binary(buf, size)) { + html("<div class='error'>blob is binary.</div>"); + goto cleanup; + } if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { htmlf("<div class='error'>blob size (%ldKB)" " exceeds display size limit (%dKB).</div>", @@ -89,6 +89,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch enum object_type type; char *buf; unsigned long size; + bool is_binary; type = oid_object_info(the_repository, oid, &size); if (type == OBJ_BAD) { @@ -103,6 +104,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch "Error reading object %s", oid_to_hex(oid)); return; } + is_binary = buffer_is_binary(buf, size); cgit_set_title_from_path(path); @@ -110,7 +112,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch htmlf("blob: %s (", oid_to_hex(oid)); cgit_plain_link("plain", NULL, NULL, ctx.qry.head, rev, path); - if (ctx.repo->enable_blame) { + if (ctx.repo->enable_blame && !is_binary) { html(") ("); cgit_blame_link("blame", NULL, NULL, ctx.qry.head, rev, path); @@ -123,7 +125,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch return; } - if (buffer_is_binary(buf, size)) + if (is_binary) print_binary_buffer(buf, size); else print_text_buffer(basename, buf, size); |