]> granicus.if.org Git - cgit/commitdiff
ui-tree,ui-blame: bail from blame if blob is binary
authorJune McEnroe <june@causal.agency>
Wed, 18 Dec 2019 21:30:12 +0000 (21:30 +0000)
committerJason A. Donenfeld <Jason@zx2c4.com>
Mon, 19 Dec 2022 14:14:05 +0000 (15:14 +0100)
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>
robots.txt
ui-blame.c
ui-tree.c

index 4ce948fec2c9f85897d29a9d892b5113006d1328..1b33266d534a29cb51f60022604ed85369f43917 100644 (file)
@@ -1,3 +1,4 @@
 User-agent: *
 Disallow: /*/snapshot/*
+Disallow: /*/blame/*
 Allow: /
index 03136f78de3283a2d0632acf3847071624fe363b..4adec2b99e5f19af19109f92677def0e635e5e9a 100644 (file)
@@ -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>",
index b61f6f5433976202ea277bfa7bf5fd9aed4c4808..034c4c89474fdb7ecd6e491ab6b0e15f2529834b 100644 (file)
--- 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);