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>
User-agent: *
Disallow: /*/snapshot/*
User-agent: *
Disallow: /*/snapshot/*
cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path);
html(")\n");
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>",
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>",
enum object_type type;
char *buf;
unsigned long size;
enum object_type type;
char *buf;
unsigned long size;
type = oid_object_info(the_repository, oid, &size);
if (type == OBJ_BAD) {
type = oid_object_info(the_repository, oid, &size);
if (type == OBJ_BAD) {
"Error reading object %s", oid_to_hex(oid));
return;
}
"Error reading object %s", oid_to_hex(oid));
return;
}
+ is_binary = buffer_is_binary(buf, size);
cgit_set_title_from_path(path);
cgit_set_title_from_path(path);
htmlf("blob: %s (", oid_to_hex(oid));
cgit_plain_link("plain", NULL, NULL, ctx.qry.head,
rev, path);
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);
html(") (");
cgit_blame_link("blame", NULL, NULL, ctx.qry.head,
rev, path);
- if (buffer_is_binary(buf, size))
print_binary_buffer(buf, size);
else
print_text_buffer(basename, buf, size);
print_binary_buffer(buf, size);
else
print_text_buffer(basename, buf, size);