aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2019-12-18 22:30:12 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2022-12-19 15:14:05 +0100
commitcc6d9cc7fc010db9be6c2d90fd054fb2d189d629 (patch)
tree667023ef4d1976928d7055e441efc3afc789e375
parente10159691e799d0f31f5314c73f47511cc974f46 (diff)
downloadcgit-cc6d9cc7fc010db9be6c2d90fd054fb2d189d629.tar.gz
cgit-cc6d9cc7fc010db9be6c2d90fd054fb2d189d629.tar.xz
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.txt1
-rw-r--r--ui-blame.c4
-rw-r--r--ui-tree.c6
3 files changed, 9 insertions, 2 deletions
diff --git a/robots.txt b/robots.txt
index 4ce948f..1b33266 100644
--- a/robots.txt
+++ b/robots.txt
@@ -1,3 +1,4 @@
User-agent: *
Disallow: /*/snapshot/*
+Disallow: /*/blame/*
Allow: /
diff --git a/ui-blame.c b/ui-blame.c
index 03136f7..4adec2b 100644
--- a/ui-blame.c
+++ b/ui-blame.c
@@ -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>",
diff --git a/ui-tree.c b/ui-tree.c
index b61f6f5..034c4c8 100644
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -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);