struct walk_tree_context *walk_tree_ctx = cbdata;
if (base->len == walk_tree_ctx->match_baselen) {
- if (S_ISREG(mode)) {
+ if (S_ISREG(mode) || S_ISLNK(mode)) {
if (print_object(sha1, pathname))
walk_tree_ctx->match = 1;
} else if (S_ISDIR(mode)) {
walk_tree_ctx->match = 2;
return READ_TREE_RECURSIVE;
}
- } else if (base->len > walk_tree_ctx->match_baselen) {
+ } else if (base->len < INT_MAX && (int)base->len > walk_tree_ctx->match_baselen) {
print_dir_entry(sha1, base->buf, base->len, pathname, mode);
walk_tree_ctx->match = 2;
} else if (S_ISDIR(mode)) {
void cgit_print_plain(void)
{
const char *rev = ctx.qry.sha1;
- unsigned char sha1[20];
+ struct object_id oid;
struct commit *commit;
struct pathspec_item path_items = {
.match = ctx.qry.path,
if (!rev)
rev = ctx.qry.head;
- if (get_sha1(rev, sha1)) {
+ if (get_oid(rev, &oid)) {
cgit_print_error_page(404, "Not found", "Not found");
return;
}
- commit = lookup_commit_reference(sha1);
+ commit = lookup_commit_reference(&oid);
if (!commit || parse_commit(commit)) {
cgit_print_error_page(404, "Not found", "Not found");
return;