diff options
Diffstat (limited to 'source/ui-summary.c')
-rw-r--r--source/ui-summary.c93
1 file changed, 3 insertions, 90 deletions
diff --git a/source/ui-summary.c b/source/ui-summary.c
index 61cd6ac..e7b229a 100644
--- a/source/ui-summary.c
+++ b/source/ui-summary.c
@@ -4,8 +4,7 @@
* with the clone urls, reusing the listings ui-refs.c and ui-log.c draw
* elsewhere. The about page renders the readme that config parsing picked for
* the repository, either through the configured about filter or escaped as
- * plain text, and it can serve a file sitting beside that readme so links
- * inside the readme resolve.
+ * plain text.
*/
#include "cgit.h"
@@ -14,7 +13,6 @@
#include "shared.h"
#include "ui-blob.h"
#include "ui-log.h"
-#include "ui-plain.h"
#include "ui-refs.h"
#include "ui-shared.h"
#include "ui-summary.h"
@@ -52,66 +50,6 @@ static void print_clone_url(const char *url)
cgit_print_clone_row(url, columns);
}
-/*
- * Without the separator boundary a sibling directory that merely shares the
- * base as a name prefix, such as repo.git-backup beside repo.git, would pass.
- */
-static int path_within(const char *base, const char *path)
-{
- size_t len = strlen(base);
-
- return starts_with(path, base) && (path[len] == '\0' || path[len] == '/');
-}
-
-/*
- * Returns a path the caller must free, or NULL when the request cannot be
- * served. A null ref means the readme is a file on the server's disk, and
- * such a readme is confined to its own directory, so one named without a
- * directory is refused.
- */
-static char *resolve_about_path(const char *filename, const char *ref, const char *path)
-{
- char *copy, *base_dir, *full_path;
- char *resolved_base = NULL, *resolved_full = NULL, *resolved_repo = NULL;
-
- // dirname is allowed to write into its argument and to return a
- // pointer into it, so base_dir borrows from a copy freed at the end.
- copy = xstrdup(filename);
- base_dir = dirname(copy);
- if (!strcmp(base_dir, ".") || !strcmp(base_dir, "..")) {
- if (!ref) {
- free(copy);
- return NULL;
- }
- full_path = xstrdup(path);
- } else {
- full_path = cgit_fmtalloc("%s/%s", base_dir, path);
- }
-
- // A readme in the repository directory, or above it, would open the
- // repository's own files, its config and hooks among them.
- if (!ref) {
- resolved_base = realpath(base_dir, NULL);
- resolved_full = realpath(full_path, NULL);
- resolved_repo = realpath(ctx.repo->path, NULL);
- if (
- !resolved_base || !resolved_full || !resolved_repo ||
- path_within(resolved_base, resolved_repo) ||
- !path_within(resolved_base, resolved_full)
- ) {
- free(full_path);
- full_path = NULL;
- }
- }
-
- free(copy);
- free(resolved_base);
- free(resolved_full);
- free(resolved_repo);
-
- return full_path;
-}
-
void cgit_print_summary(void)
{
cgit_print_layout_start();
@@ -130,34 +68,14 @@ void cgit_print_summary(void)
cgit_print_layout_end();
}
-void cgit_print_repo_readme(const char *path)
+void cgit_print_repo_readme(void)
{
- char *filename, *ref, *mimetype;
- int free_filename = 0;
-
- mimetype = cgit_get_mimetype_for_filename(path);
- if (mimetype && (starts_with(mimetype, "image/") || starts_with(mimetype, "video/"))) {
- ctx.page.mimetype = mimetype;
- cgit_print_plain();
- free(mimetype);
- return;
- }
- free(mimetype);
+ char *filename, *ref;
cgit_print_layout_start();
- if (ctx.repo->readme.nr == 0)
- goto done;
-
filename = ctx.repo->readme.items[0].string;
ref = ctx.repo->readme.items[0].util;
- if (path) {
- free_filename = 1;
- filename = resolve_about_path(filename, ref, path);
- if (!filename)
- goto done;
- }
-
html("<div id='about'>");
if (!ctx.repo->about_filter) {
// With no about-filter there is nothing to turn the readme
@@ -182,11 +100,6 @@ void cgit_print_repo_readme(const char *path)
html_include(filename);
cgit_close_filter(ctx.repo->about_filter);
}
-
html("</div>");
- if (free_filename)
- free(filename);
-
-done:
cgit_print_layout_end();
}