From: Eric Wong Date: Thu, 30 Nov 2023 11:40:56 +0000 (+0000) Subject: config: reject newlines consistently in dir names X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c51cab322be0f255d8d51cea6c91a210fb35fb09;p=thirdparty%2Fpublic-inbox.git config: reject newlines consistently in dir names Explicitly drop support for "\n" in git coderepo pathnames as we do other stuff. Gcf2 (our libgit2 helper) was always broken with "\n" in pathnames, and I'm not sure if cgit config files work with them, either. Dealing with newline characters requires extra complexity that I'm not willing to deal with when managing alternates files. --- diff --git a/lib/PublicInbox/Config.pm b/lib/PublicInbox/Config.pm index 779e31405..6bebf790b 100644 --- a/lib/PublicInbox/Config.pm +++ b/lib/PublicInbox/Config.pm @@ -361,12 +361,19 @@ sub parse_cgitrc { cgit_repo_merge($self, $repo->{dir}, $repo) if $repo; } +sub valid_dir ($$) { + my $dir = get_1($_[0], $_[1]) // return; + index($dir, "\n") < 0 ? $dir : do { + warn "E: `$_[1]=$dir' must not contain `\\n'\n"; + undef; + } +} + # parse a code repo, only git is supported at the moment sub fill_coderepo { my ($self, $nick) = @_; my $pfx = "coderepo.$nick"; - my $dir = $self->{"$pfx.dir"} // return undef; # aka "GIT_DIR" - my $git = PublicInbox::Git->new($dir); + my $git = PublicInbox::Git->new(valid_dir($self, "$pfx.dir") // return); if (defined(my $cgits = $self->{"$pfx.cgiturl"})) { $git->{cgit_url} = $cgits = _array($cgits); $self->{"$pfx.cgiturl"} = $cgits; @@ -450,18 +457,15 @@ sub _fill_ibx { my $v = $self->{"$pfx.$k"}; $ibx->{$k} = $v if defined $v; } - for my $k (qw(filter inboxdir newsgroup replyto httpbackendmax feedmax + for my $k (qw(filter newsgroup replyto httpbackendmax feedmax indexlevel indexsequentialshard boost)) { my $v = get_1($self, "$pfx.$k") // next; $ibx->{$k} = $v; } # "mainrepo" is backwards compatibility: - my $dir = $ibx->{inboxdir} //= $self->{"$pfx.mainrepo"} // return; - if (index($dir, "\n") >= 0) { - warn "E: `$dir' must not contain `\\n'\n"; - return; - } + my $dir = $ibx->{inboxdir} = valid_dir($self, "$pfx.inboxdir") // + valid_dir($self, "$pfx.mainrepo") // return; for my $k (qw(obfuscate)) { my $v = $self->{"$pfx.$k"} // next; if (defined(my $bval = git_bool($v))) { @@ -548,12 +552,8 @@ sub _fill_ei ($$) { my ($self, $name) = @_; eval { require PublicInbox::ExtSearch } or return; my $pfx = "extindex.$name"; - my $d = $self->{"$pfx.topdir"} // return; + my $d = valid_dir($self, "$pfx.topdir") // return; -d $d or return; - if (index($d, "\n") >= 0) { - warn "E: `$d' must not contain `\\n'\n"; - return; - } my $es = PublicInbox::ExtSearch->new($d); for my $k (qw(indexlevel indexsequentialshard)) { my $v = get_1($self, "$pfx.$k") // next; @@ -573,12 +573,8 @@ sub _fill_csrch ($$) { return if $name ne '' && !valid_foo_name($name, 'cindex'); eval { require PublicInbox::CodeSearch } or return; my $pfx = "cindex.$name"; - my $d = $self->{"$pfx.topdir"} // return; + my $d = valid_dir($self, "$pfx.topdir") // return; -d $d or return; - if (index($d, "\n") >= 0) { - warn "E: `$d' must not contain `\\n'\n"; - return; - } my $csrch = PublicInbox::CodeSearch->new($d, $self); for my $k (qw(localprefix)) { my $v = $self->{"$pfx.$k"} // next;