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>
This commit is contained in:
		
							parent
							
								
									e10159691e
								
							
						
					
					
						commit
						cc6d9cc7fc
					
				| @ -1,3 +1,4 @@ | |||||||
| User-agent: * | User-agent: * | ||||||
| Disallow: /*/snapshot/* | Disallow: /*/snapshot/* | ||||||
|  | Disallow: /*/blame/* | ||||||
| Allow: / | 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); | 	cgit_tree_link("tree", NULL, NULL, ctx.qry.head, rev, path); | ||||||
| 	html(")\n"); | 	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) { | 	if (ctx.cfg.max_blob_size && size / 1024 > ctx.cfg.max_blob_size) { | ||||||
| 		htmlf("<div class='error'>blob size (%ldKB)" | 		htmlf("<div class='error'>blob size (%ldKB)" | ||||||
| 		      " exceeds display size limit (%dKB).</div>", | 		      " 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; | 	enum object_type type; | ||||||
| 	char *buf; | 	char *buf; | ||||||
| 	unsigned long size; | 	unsigned long size; | ||||||
|  | 	bool is_binary; | ||||||
| 
 | 
 | ||||||
| 	type = oid_object_info(the_repository, oid, &size); | 	type = oid_object_info(the_repository, oid, &size); | ||||||
| 	if (type == OBJ_BAD) { | 	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)); | 			"Error reading object %s", oid_to_hex(oid)); | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  | 	is_binary = buffer_is_binary(buf, size); | ||||||
| 
 | 
 | ||||||
| 	cgit_set_title_from_path(path); | 	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)); | 	htmlf("blob: %s (", oid_to_hex(oid)); | ||||||
| 	cgit_plain_link("plain", NULL, NULL, ctx.qry.head, | 	cgit_plain_link("plain", NULL, NULL, ctx.qry.head, | ||||||
| 		        rev, path); | 		        rev, path); | ||||||
| 	if (ctx.repo->enable_blame) { | 	if (ctx.repo->enable_blame && !is_binary) { | ||||||
| 		html(") ("); | 		html(") ("); | ||||||
| 		cgit_blame_link("blame", NULL, NULL, ctx.qry.head, | 		cgit_blame_link("blame", NULL, NULL, ctx.qry.head, | ||||||
| 			        rev, path); | 			        rev, path); | ||||||
| @ -123,7 +125,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (buffer_is_binary(buf, size)) | 	if (is_binary) | ||||||
| 		print_binary_buffer(buf, size); | 		print_binary_buffer(buf, size); | ||||||
| 	else | 	else | ||||||
| 		print_text_buffer(basename, buf, size); | 		print_text_buffer(basename, buf, size); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user