From list at eworm.de Thu Jun 1 10:03:10 2023 From: list at eworm.de (Christian Hesse) Date: Thu, 1 Jun 2023 12:03:10 +0200 Subject: [PATCH 1/1] git: update to v2.41.0 Message-ID: <20230601100310.56995-1-list@eworm.de> From: Christian Hesse Update to git version v2.41.0, with lots of changes... This requires changes for these upstream commits: * 60ff56f50372c1498718938ef504e744fe011ffb banned.h: mark `strtok()` and `strtok_r()` as banned * 52acddf36c8cb3778ab2098a0d95cc2e375a4069 string-list: multi-delimiter `string_list_split_in_place()` * d850b7a545fcfbd97460a921c7f7c59d933eb0f7 cocci: apply the "cache.h" part of "the_repository.pending" * cb338c23d6d518947bf6f7240bf30e2ec232bd3b cocci: apply the "commit-reach.h" part of "the_repository.pending" * ecb5091fd4301ac647db0bd2504112b38f7ee06d cocci: apply the "commit.h" part of "the_repository.pending" * 085390328f5fe1dfba67039b1fd6cc51546a4e41 cocci: apply the "diff.h" part of "the_repository.pending" * bc726bd075929aab6b3e09d4dd5c2b0726fd5350 cocci: apply the "object-store.h" part of "the_repository.pending" * bab821646a74c446370fa8d01ca851f247df5033 cocci: apply the "pretty.h" part of "the_repository.pending" * afe27c889429438829bc8818ed17e4960bd3ef02 cocci: apply the "packfile.h" part of "the_repository.pending" * 12cb1c10a64170a5d600dd1c6c8abfeec105fb6b cocci: apply the "refs.h" part of "the_repository.pending" * 035c7de9e9ea11d26df5f9e4bb117f91ed11a9fd cocci: apply the "revision.h" part of "the_repository.pending" ... and some more I missed to list ? - for example the move and cleanup of headers and includes (see changes in `cgit.h`) comes to mind... Signed-off-by: Christian Hesse --- Makefile | 2 +- cgit.c | 2 +- cgit.h | 30 +++++++++++++++++------------- git | 2 +- parsing.c | 2 +- shared.c | 17 +++++++++++------ ui-atom.c | 2 +- ui-blame.c | 12 ++++++------ ui-blob.c | 10 +++++----- ui-commit.c | 2 +- ui-diff.c | 14 +++++++------- ui-log.c | 6 +++--- ui-patch.c | 6 +++--- ui-plain.c | 6 +++--- ui-shared.c | 8 ++++---- ui-snapshot.c | 14 +++++++------- ui-stats.c | 2 +- ui-tag.c | 2 +- ui-tree.c | 8 ++++---- 19 files changed, 78 insertions(+), 69 deletions(-) diff --git a/Makefile b/Makefile index 3fc1d5a..b0de0ee 100644 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ htmldir = $(docdir) pdfdir = $(docdir) mandir = $(prefix)/share/man SHA1_HEADER = -GIT_VER = 2.40.1 +GIT_VER = 2.41.0 GIT_URL = https://www.kernel.org/pub/software/scm/git/git-$(GIT_VER).tar.xz INSTALL = install COPYTREE = cp -r diff --git a/cgit.c b/cgit.c index 57d7097..e616292 100644 --- a/cgit.c +++ b/cgit.c @@ -631,7 +631,7 @@ static int prepare_repo_cmd(int nongit) return 1; } - if (get_oid(ctx.qry.head, &oid)) { + if (repo_get_oid(the_repository, ctx.qry.head, &oid)) { char *old_head = ctx.qry.head; ctx.qry.head = xstrdup(ctx.repo->defbranch); cgit_print_error_page(404, "Not found", diff --git a/cgit.h b/cgit.h index ddd2ccb..f788fd2 100644 --- a/cgit.h +++ b/cgit.h @@ -1,31 +1,35 @@ #ifndef CGIT_H #define CGIT_H +#include #include -#include +#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include +#include #include -#include -#include -#include -#include -#include -#include #include #include -#include -#include +#include #include +#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include /* Add isgraph(x) to Git's sane ctype support (see git-compat-util.h) */ #undef isgraph diff --git a/git b/git index 0d1bd1d..fe86abd 160000 --- a/git +++ b/git @@ -1 +1 @@ -Subproject commit 0d1bd1dfb37ef25e1911777c94129fc769ffec38 +Subproject commit fe86abd7511a9a6862d5706c6fa1d9b57a63ba09 diff --git a/parsing.c b/parsing.c index 72b59b3..dc44ffd 100644 --- a/parsing.c +++ b/parsing.c @@ -198,7 +198,7 @@ struct taginfo *cgit_parse_tag(struct tag *tag) const char *p; struct taginfo *ret = NULL; - data = read_object_file(&tag->object.oid, &type, &size); + data = repo_read_object_file(the_repository, &tag->object.oid, &type, &size); if (!data || type != OBJ_TAG) goto cleanup; diff --git a/shared.c b/shared.c index 0bceb98..26b6ddb 100644 --- a/shared.c +++ b/shared.c @@ -241,7 +241,7 @@ static int load_mmfile(mmfile_t *file, const struct object_id *oid) file->ptr = (char *)""; file->size = 0; } else { - file->ptr = read_object_file(oid, &type, + file->ptr = repo_read_object_file(the_repository, oid, &type, (unsigned long *)&file->size); } return 1; @@ -343,7 +343,7 @@ void cgit_diff_tree(const struct object_id *old_oid, struct diff_options opt; struct pathspec_item *item; - diff_setup(&opt); + repo_diff_setup(the_repository, &opt); opt.output_format = DIFF_FORMAT_CALLBACK; opt.detect_rename = 1; opt.rename_limit = ctx.cfg.renamelimit; @@ -539,7 +539,9 @@ char *expand_macros(const char *txt) char *get_mimetype_for_filename(const char *filename) { - char *ext, *mimetype, *token, line[1024], *saveptr; + char *ext, *mimetype, line[1024]; + struct string_list list = STRING_LIST_INIT_NODUP; + int i; FILE *file; struct string_list_item *mime; @@ -564,13 +566,16 @@ char *get_mimetype_for_filename(const char *filename) while (fgets(line, sizeof(line), file)) { if (!line[0] || line[0] == '#') continue; - mimetype = strtok_r(line, " \t\r\n", &saveptr); - while ((token = strtok_r(NULL, " \t\r\n", &saveptr))) { - if (!strcasecmp(ext, token)) { + string_list_split_in_place(&list, line, " \t\r\n", -1); + string_list_remove_empty_items(&list, 0); + mimetype = list.items[0].string; + for (i = 1; i < list.nr; i++) { + if (!strcasecmp(ext, list.items[i].string)) { fclose(file); return xstrdup(mimetype); } } + string_list_clear(&list, 0); } fclose(file); return NULL; diff --git a/ui-atom.c b/ui-atom.c index 5f4ad7d..636cb7e 100644 --- a/ui-atom.c +++ b/ui-atom.c @@ -97,7 +97,7 @@ void cgit_print_atom(char *tip, const char *path, int max_count) argv[argc++] = path; } - init_revisions(&rev, NULL); + repo_init_revisions(the_repository, &rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.verbose_header = 1; diff --git a/ui-blame.c b/ui-blame.c index aedce8d..e0f0593 100644 --- a/ui-blame.c +++ b/ui-blame.c @@ -49,12 +49,12 @@ static void emit_blame_entry_hash(struct blame_entry *ent) char *detail = emit_suspect_detail(suspect); html(""); - cgit_commit_link(find_unique_abbrev(oid, DEFAULT_ABBREV), detail, + cgit_commit_link(repo_find_unique_abbrev(the_repository, oid, DEFAULT_ABBREV), detail, NULL, ctx.qry.head, oid_to_hex(oid), suspect->path); html(""); free(detail); - if (!parse_commit(suspect->commit) && suspect->commit->parents) { + if (!repo_parse_commit(the_repository, suspect->commit) && suspect->commit->parents) { struct commit *parent = suspect->commit->parents->item; html(" "); @@ -126,7 +126,7 @@ static void print_object(const struct object_id *oid, const char *path, return; } - buf = read_object_file(oid, &type, &size); + buf = repo_read_object_file(the_repository, oid, &type, &size); if (!buf) { cgit_print_error_page(500, "Internal server error", "Error reading object %s", oid_to_hex(oid)); @@ -135,7 +135,7 @@ static void print_object(const struct object_id *oid, const char *path, strvec_push(&rev_argv, "blame"); strvec_push(&rev_argv, rev); - init_revisions(&revs, NULL); + repo_init_revisions(the_repository, &revs, NULL); revs.diffopt.flags.allow_textconv = 1; setup_revisions(rev_argv.nr, rev_argv.v, &revs, NULL); init_scoreboard(&sb); @@ -287,13 +287,13 @@ void cgit_print_blame(void) if (!rev) rev = ctx.qry.head; - if (get_oid(rev, &oid)) { + if (repo_get_oid(the_repository, rev, &oid)) { cgit_print_error_page(404, "Not found", "Invalid revision name: %s", rev); return; } commit = lookup_commit_reference(the_repository, &oid); - if (!commit || parse_commit(commit)) { + if (!commit || repo_parse_commit(the_repository, commit)) { cgit_print_error_page(404, "Not found", "Invalid commit reference: %s", rev); return; diff --git a/ui-blob.c b/ui-blob.c index c10ae42..08f94ee 100644 --- a/ui-blob.c +++ b/ui-blob.c @@ -52,7 +52,7 @@ int cgit_ref_path_exists(const char *path, const char *ref, int file_only) .file_only = file_only }; - if (get_oid(ref, &oid)) + if (repo_get_oid(the_repository, ref, &oid)) goto done; if (oid_object_info(the_repository, &oid, &size) != OBJ_COMMIT) goto done; @@ -87,7 +87,7 @@ int cgit_print_file(char *path, const char *head, int file_only) .file_only = file_only }; - if (get_oid(head, &oid)) + if (repo_get_oid(the_repository, head, &oid)) return -1; type = oid_object_info(the_repository, &oid, &size); if (type == OBJ_COMMIT) { @@ -100,7 +100,7 @@ int cgit_print_file(char *path, const char *head, int file_only) } if (type == OBJ_BAD) return -1; - buf = read_object_file(&oid, &type, &size); + buf = repo_read_object_file(the_repository, &oid, &type, &size); if (!buf) return -1; buf[size] = '\0'; @@ -138,7 +138,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head, int file_onl return; } } else { - if (get_oid(head, &oid)) { + if (repo_get_oid(the_repository, head, &oid)) { cgit_print_error_page(404, "Not found", "Bad ref: %s", head); return; @@ -160,7 +160,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head, int file_onl return; } - buf = read_object_file(&oid, &type, &size); + buf = repo_read_object_file(the_repository, &oid, &type, &size); if (!buf) { cgit_print_error_page(500, "Internal server error", "Error reading object %s", hex); diff --git a/ui-commit.c b/ui-commit.c index 0787237..30672d0 100644 --- a/ui-commit.c +++ b/ui-commit.c @@ -26,7 +26,7 @@ void cgit_print_commit(char *hex, const char *prefix) if (!hex) hex = ctx.qry.head; - if (get_oid(hex, &oid)) { + if (repo_get_oid(the_repository, hex, &oid)) { cgit_print_error_page(400, "Bad request", "Bad object id: %s", hex); return; diff --git a/ui-diff.c b/ui-diff.c index 5ed5990..6f42dd4 100644 --- a/ui-diff.c +++ b/ui-diff.c @@ -258,8 +258,8 @@ static void header(const struct object_id *oid1, char *path1, int mode1, htmlf("
deleted file mode %.6o", mode1); if (!subproject) { - abbrev1 = xstrdup(find_unique_abbrev(oid1, DEFAULT_ABBREV)); - abbrev2 = xstrdup(find_unique_abbrev(oid2, DEFAULT_ABBREV)); + abbrev1 = xstrdup(repo_find_unique_abbrev(the_repository, oid1, DEFAULT_ABBREV)); + abbrev2 = xstrdup(repo_find_unique_abbrev(the_repository, oid2, DEFAULT_ABBREV)); htmlf("
index %s..%s", abbrev1, abbrev2); free(abbrev1); free(abbrev2); @@ -402,13 +402,13 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, if (!new_rev) new_rev = ctx.qry.head; - if (get_oid(new_rev, new_rev_oid)) { + if (repo_get_oid(the_repository, new_rev, new_rev_oid)) { cgit_print_error_page(404, "Not found", "Bad object name: %s", new_rev); return; } commit = lookup_commit_reference(the_repository, new_rev_oid); - if (!commit || parse_commit(commit)) { + if (!commit || repo_parse_commit(the_repository, commit)) { cgit_print_error_page(404, "Not found", "Bad commit: %s", oid_to_hex(new_rev_oid)); return; @@ -416,7 +416,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, new_tree_oid = get_commit_tree_oid(commit); if (old_rev) { - if (get_oid(old_rev, old_rev_oid)) { + if (repo_get_oid(the_repository, old_rev, old_rev_oid)) { cgit_print_error_page(404, "Not found", "Bad object name: %s", old_rev); return; @@ -429,7 +429,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, if (!is_null_oid(old_rev_oid)) { commit2 = lookup_commit_reference(the_repository, old_rev_oid); - if (!commit2 || parse_commit(commit2)) { + if (!commit2 || repo_parse_commit(the_repository, commit2)) { cgit_print_error_page(404, "Not found", "Bad commit: %s", oid_to_hex(old_rev_oid)); return; @@ -442,7 +442,7 @@ void cgit_print_diff(const char *new_rev, const char *old_rev, if (raw) { struct diff_options diffopt; - diff_setup(&diffopt); + repo_diff_setup(the_repository, &diffopt); diffopt.output_format = DIFF_FORMAT_PATCH; diffopt.flags.recursive = 1; diff_setup_done(&diffopt); diff --git a/ui-log.c b/ui-log.c index 311304a..50d479d 100644 --- a/ui-log.c +++ b/ui-log.c @@ -146,7 +146,7 @@ static int show_commit(struct commit *commit, struct rev_info *revs) /* When we get here we have precisely one parent. */ parent = parents->item; /* If we can't parse the commit, let print_commit() report an error. */ - if (parse_commit(parent)) + if (repo_parse_commit(the_repository, parent)) return 1; files = 0; @@ -330,7 +330,7 @@ static const char *disambiguate_ref(const char *ref, int *must_free_result) struct strbuf longref = STRBUF_INIT; strbuf_addf(&longref, "refs/heads/%s", ref); - if (get_oid(longref.buf, &oid) == 0) { + if (repo_get_oid(the_repository, longref.buf, &oid) == 0) { *must_free_result = 1; return strbuf_detach(&longref, NULL); } @@ -430,7 +430,7 @@ void cgit_print_log(const char *tip, int ofs, int cnt, char *grep, char *pattern if (path) strvec_push(&rev_argv, path); - init_revisions(&rev, NULL); + repo_init_revisions(the_repository, &rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.verbose_header = 1; diff --git a/ui-patch.c b/ui-patch.c index 4ac03cb..3819a81 100644 --- a/ui-patch.c +++ b/ui-patch.c @@ -31,7 +31,7 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, if (!new_rev) new_rev = ctx.qry.head; - if (get_oid(new_rev, &new_rev_oid)) { + if (repo_get_oid(the_repository, new_rev, &new_rev_oid)) { cgit_print_error_page(404, "Not found", "Bad object id: %s", new_rev); return; @@ -44,7 +44,7 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, } if (old_rev) { - if (get_oid(old_rev, &old_rev_oid)) { + if (repo_get_oid(the_repository, old_rev, &old_rev_oid)) { cgit_print_error_page(404, "Not found", "Bad object id: %s", old_rev); return; @@ -78,7 +78,7 @@ void cgit_print_patch(const char *new_rev, const char *old_rev, "%s%n%n%w(0)%b"; } - init_revisions(&rev, NULL); + repo_init_revisions(the_repository, &rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.verbose_header = 1; rev.diff = 1; diff --git a/ui-plain.c b/ui-plain.c index 65a205f..a66c5a1 100644 --- a/ui-plain.c +++ b/ui-plain.c @@ -28,7 +28,7 @@ static int print_object(const struct object_id *oid, const char *path) return 0; } - buf = read_object_file(oid, &type, &size); + buf = repo_read_object_file(the_repository, oid, &type, &size); if (!buf) { cgit_print_error_page(404, "Not found", "Not found"); return 0; @@ -181,12 +181,12 @@ void cgit_print_plain(void) if (!rev) rev = ctx.qry.head; - if (get_oid(rev, &oid)) { + if (repo_get_oid(the_repository, rev, &oid)) { cgit_print_error_page(404, "Not found", "Not found"); return; } commit = lookup_commit_reference(the_repository, &oid); - if (!commit || parse_commit(commit)) { + if (!commit || repo_parse_commit(the_repository, commit)) { cgit_print_error_page(404, "Not found", "Not found"); return; } diff --git a/ui-shared.c b/ui-shared.c index baea6f2..eef2aa8 100644 --- a/ui-shared.c +++ b/ui-shared.c @@ -1188,11 +1188,11 @@ void cgit_compose_snapshot_prefix(struct strbuf *filename, const char *base, * name starts with {v,V}[0-9] and the prettify mapping is injective, * i.e. each stripped tag can be inverted without ambiguities. */ - if (get_oid(fmt("refs/tags/%s", ref), &oid) == 0 && + if (repo_get_oid(the_repository, fmt("refs/tags/%s", ref), &oid) == 0 && (ref[0] == 'v' || ref[0] == 'V') && isdigit(ref[1]) && - ((get_oid(fmt("refs/tags/%s", ref + 1), &oid) == 0) + - (get_oid(fmt("refs/tags/v%s", ref + 1), &oid) == 0) + - (get_oid(fmt("refs/tags/V%s", ref + 1), &oid) == 0) == 1)) + ((repo_get_oid(the_repository, fmt("refs/tags/%s", ref + 1), &oid) == 0) + + (repo_get_oid(the_repository, fmt("refs/tags/v%s", ref + 1), &oid) == 0) + + (repo_get_oid(the_repository, fmt("refs/tags/V%s", ref + 1), &oid) == 0) == 1)) ref++; strbuf_addf(filename, "%s-%s", base, ref); diff --git a/ui-snapshot.c b/ui-snapshot.c index 18361a6..9f629a9 100644 --- a/ui-snapshot.c +++ b/ui-snapshot.c @@ -117,7 +117,7 @@ const struct object_id *cgit_snapshot_get_sig(const char *ref, struct notes_tree *tree; struct object_id oid; - if (get_oid(ref, &oid)) + if (repo_get_oid(the_repository, ref, &oid)) return NULL; tree = &snapshot_sig_notes[f - &cgit_snapshot_formats[0]]; @@ -156,7 +156,7 @@ static int make_snapshot(const struct cgit_snapshot_format *format, { struct object_id oid; - if (get_oid(hex, &oid)) { + if (repo_get_oid(the_repository, hex, &oid)) { cgit_print_error_page(404, "Not found", "Bad object id: %s", hex); return 1; @@ -190,7 +190,7 @@ static int write_sig(const struct cgit_snapshot_format *format, return 0; } - buf = read_object_file(note, &type, &size); + buf = repo_read_object_file(the_repository, note, &type, &size); if (!buf) { cgit_print_error_page(404, "Not found", "Not found"); return 0; @@ -230,7 +230,7 @@ static const char *get_ref_from_filename(const struct cgit_repo *repo, strbuf_addstr(&snapshot, filename); strbuf_setlen(&snapshot, snapshot.len - strlen(format->suffix)); - if (get_oid(snapshot.buf, &oid) == 0) + if (repo_get_oid(the_repository, snapshot.buf, &oid) == 0) goto out; reponame = cgit_snapshot_prefix(repo); @@ -242,15 +242,15 @@ static const char *get_ref_from_filename(const struct cgit_repo *repo, strbuf_splice(&snapshot, 0, new_start - snapshot.buf, "", 0); } - if (get_oid(snapshot.buf, &oid) == 0) + if (repo_get_oid(the_repository, snapshot.buf, &oid) == 0) goto out; strbuf_insert(&snapshot, 0, "v", 1); - if (get_oid(snapshot.buf, &oid) == 0) + if (repo_get_oid(the_repository, snapshot.buf, &oid) == 0) goto out; strbuf_splice(&snapshot, 0, 1, "V", 1); - if (get_oid(snapshot.buf, &oid) == 0) + if (repo_get_oid(the_repository, snapshot.buf, &oid) == 0) goto out; result = 0; diff --git a/ui-stats.c b/ui-stats.c index 40ed6c2..9aed4ac 100644 --- a/ui-stats.c +++ b/ui-stats.c @@ -230,7 +230,7 @@ static struct string_list collect_stats(const struct cgit_period *period) argv[4] = ctx.qry.path; argc += 2; } - init_revisions(&rev, NULL); + repo_init_revisions(the_repository, &rev, NULL); rev.abbrev = DEFAULT_ABBREV; rev.commit_format = CMIT_FMT_DEFAULT; rev.max_parents = 1; diff --git a/ui-tag.c b/ui-tag.c index 424bbcc..5354827 100644 --- a/ui-tag.c +++ b/ui-tag.c @@ -48,7 +48,7 @@ void cgit_print_tag(char *revname) revname = ctx.qry.head; strbuf_addf(&fullref, "refs/tags/%s", revname); - if (get_oid(fullref.buf, &oid)) { + if (repo_get_oid(the_repository, fullref.buf, &oid)) { cgit_print_error_page(404, "Not found", "Bad tag reference: %s", revname); goto cleanup; diff --git a/ui-tree.c b/ui-tree.c index 98ce1ca..0640336 100644 --- a/ui-tree.c +++ b/ui-tree.c @@ -98,7 +98,7 @@ static void print_object(const struct object_id *oid, const char *path, const ch return; } - buf = read_object_file(oid, &type, &size); + buf = repo_read_object_file(the_repository, oid, &type, &size); if (!buf) { cgit_print_error_page(500, "Internal server error", "Error reading object %s", oid_to_hex(oid)); @@ -242,7 +242,7 @@ static int ls_item(const struct object_id *oid, struct strbuf *base, } if (S_ISLNK(mode)) { html(" -> "); - buf = read_object_file(oid, &type, &size); + buf = repo_read_object_file(the_repository, oid, &type, &size); if (!buf) { htmlf("Error reading object: %s", oid_to_hex(oid)); goto cleanup; @@ -372,13 +372,13 @@ void cgit_print_tree(const char *rev, char *path) if (!rev) rev = ctx.qry.head; - if (get_oid(rev, &oid)) { + if (repo_get_oid(the_repository, rev, &oid)) { cgit_print_error_page(404, "Not found", "Invalid revision name: %s", rev); return; } commit = lookup_commit_reference(the_repository, &oid); - if (!commit || parse_commit(commit)) { + if (!commit || repo_parse_commit(the_repository, commit)) { cgit_print_error_page(404, "Not found", "Invalid commit reference: %s", rev); return; -- 2.40.1 From list at eworm.de Thu Jun 1 10:05:27 2023 From: list at eworm.de (Christian Hesse) Date: Thu, 1 Jun 2023 12:05:27 +0200 Subject: [PATCH 1/1] git: update to v2.41.0 In-Reply-To: <20230601100310.56995-1-list@eworm.de> References: <20230601100310.56995-1-list@eworm.de> Message-ID: <20230601120527.3fddc0bf@leda.eworm.net> Christian Hesse on Thu, 2023/06/01 12:03: > Update to git version v2.41.0, with lots of changes... > This requires changes for these upstream commits: We have a lot of breaking changes here... Any chance to have this fast-forwarded into master? -- main(a){char*c=/* Schoene Gruesse */"B?IJj;MEH" "CX:;",b;for(a/* Best regards my address: */=0;b=c[a++];) putchar(b-1/(/* Chris cc -ox -xc - && ./x */b/42*2-3)*42);} -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 488 bytes Desc: OpenPGP digital signature URL: From fche at elastic.org Sat Jun 10 00:03:44 2023 From: fche at elastic.org (Frank Ch. Eigler) Date: Fri, 9 Jun 2023 20:03:44 -0400 Subject: SEGV in cgit-1.2.3 on unreadable refs/tags/FOO Message-ID: Hi - Over on sourceware.org, we run a cgit instance to expose the various git repos held there. We noticed in the logs a recurrent SEGV of the cgi-bin/cgit process, looking thusly: #0 0x000056510452bfae in cgit_mk_refinfo (oid=0x565105f5bc98, refname=0x565105f5bcca "cluster-2.99.02") at ../shared.c:165 #1 cgit_refs_cb (refname=0x565105f5bcca "cluster-2.99.02", oid=0x565105f5bc98, flags=, cb_data=0x7fff6dc25fc0) at ../shared.c:217 #2 0x00005651045d3b44 in do_for_each_repo_ref_iterator (r=0x56510490fc20 , iter=0x565105f7de00, fn=fn at entry=0x5651045c6cc0 , cb_data=cb_data at entry=0x7fff6dc25f80) at refs/iterator.c:418 #3 0x00005651045c9669 in do_for_each_ref (refs=, prefix=prefix at entry=0x5651046a1d4e "refs/tags/", fn=, trim=, flags=flags at entry=(unknown: 0), cb_data=cb_data at entry=0x56510453295b ) at refs.c:1498 #4 0x00005651045c96f2 in refs_for_each_ref_in (refs=, prefix=prefix at entry=0x5651046a1d4e "refs/tags/", fn=, cb_data=cb_data at entry=0x56510453295b ) at refs.c:1515 #5 0x00005651045ca217 in refs_for_each_tag_ref (cb_data=0x56510453295b , fn=, refs=) at refs.c:409 #6 for_each_tag_ref (fn=, cb_data=cb_data at entry=0x7fff6dc25fc0) at refs.c:414 #7 0x000056510453295b in cgit_print_tags (maxcount=2087820800) at ../ui-refs.c:185 #8 0x0000565104539e1d in cgit_print_summary () at ../ui-summary.c:56 #9 0x0000565104525c1f in process_request () at ../cgit.c:755 (gdb) print *oid $1 = {hash = '\000' , algo = 1} It appears as though the oid is null or invalid. That in turns appears to be because the refs/tags/cluster-2.99.02 file had perms 0440, i.e., unreadable to the cgi process. With world-readability restored, the code started working again. - FChE From yazar.strulik at googlemail.com Thu Jun 15 07:40:35 2023 From: yazar.strulik at googlemail.com (Yazar Strulik) Date: Thu, 15 Jun 2023 09:40:35 +0200 Subject: cgit simple-authentication.lua problem Message-ID: Hi cgit-people, I need some help with getting the simple-authentication.lua running. I'm using gitolite as my git base with cgit as my front-end and apache2 as the webserver. The main cgit configuration works but it cant interpret the .lua files when using the authentication-filters by adding following line to the cgitrc: ``` auth-filter=/usr/lib/cgit/filters/simple-authentication.lua ``` The error I get from apache2 error.log is: ``` AH01215: /usr/lib/cgit/filters/simple-authentication.lua: 1: : /usr/lib/cgit/cgit.cgi AH01215: --: not found: /usr/lib/cgit/cgit.cgi AH01215: : /usr/lib/cgit/cgit.cgi AH01215: /usr/lib/cgit/filters/simple-authentication.lua: 2: --: not found: /usr/lib/cgit/cgit.cgi AH01215: /usr/lib/cgit/filters/simple-authentication.lua: 3: --: not found: /usr/lib/cgit/cgit.cgi AH01215: /usr/lib/cgit/filters/simple-authentication.lua: 4: --: not found: /usr/lib/cgit/cgit.cgi AH01215: /usr/lib/cgit/filters/simple-authentication.lua: 6: Syntax error: newline unexpected: /usr/lib/cgit/cgit.cgi ``` Which seems from "--: not found" as if he is trying to execute the lua comments at the start of simple-authentication.lua. I enabled the cgi and lua mods for apache (with a2enmod) and apt installed luajit, lua-posix and luaossl. I'm not really sure how to fix this problem but maybe someone of you knows how to fix it, since problems on that are rare on the internet. Greetings, Yaz From john at keeping.me.uk Thu Jun 15 18:57:48 2023 From: john at keeping.me.uk (John Keeping) Date: Thu, 15 Jun 2023 19:57:48 +0100 Subject: cgit simple-authentication.lua problem In-Reply-To: References: Message-ID: On Thu, Jun 15, 2023 at 09:40:35AM +0200, Yazar Strulik wrote: > I need some help with getting the simple-authentication.lua running. > > I'm using gitolite as my git base with cgit as my front-end and apache2 as > the webserver. > The main cgit configuration works but it cant interpret the .lua files when > using the authentication-filters by adding following line to the cgitrc: > > auth-filter=/usr/lib/cgit/filters/simple-authentication.lua The path needs a "lua:" prefix, like this: auth-filter=lua:/usr/lib/cgit/filters/simple-authentication.lua Without that the default "exec:" path is used which tries to execute the script. From marko at zajc.eu.org Sun Jun 25 02:46:44 2023 From: marko at zajc.eu.org (Marko Zajc) Date: Sun, 25 Jun 2023 04:46:44 +0200 Subject: SEGV in cgit-1.2.3 on following logs of a nonexistent file with cache Message-ID: <6615b2e7-625b-93d5-76dd-5c5185dfd3b3@zajc.eu.org> Dear cgit developers, I would like to report a segmentation fault in cgit that can be reproduced with the following steps: 1. Set `enable-follow-links` to `1` 2. Set `cache-size` to a non-zero value. I'm not sure if this only occurs on specific values, but I've tried a few numbers in the 1 ? 10000 range and they all cause this to happen 3. Have cgit installed and active at least one repository 4. Try following the log of a file that doesn't exist, for example `https://git.zx2c4.com/cgit/log/file-that-doesnt-exist?follow=1` On certain repositories, I am able to consistently reproduce this with the above steps, but others seem unaffected. Changing the `cache-size` value between 1 and N does not seem to change which repositories are affected, but I didn't try that on a very large sample size. For example: * git://zajc.eu.org/xheadset.git *is not affected* by this, but * git://zajc.eu.org/gogarchiver.git *is affected* I don't have the stack trace, but I can try getting one in case you're unable to reproduce this issue. I am using Debian 12's build of cgit 1.2.3. I have disabled `enable-follow-links` on my own website, so it won't exhibit this behaviour. - Marko Zajc -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_0xD763FF6BE6F2A7AA_and_old_rev.asc Type: application/pgp-keys Size: 6108 bytes Desc: OpenPGP public key URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: OpenPGP_signature Type: application/pgp-signature Size: 840 bytes Desc: OpenPGP digital signature URL: