Since "publicinbox" sections are analogous to git remotes, we
may use the same rules for naming git remotes to reduce
cognitive overhead.
Most notably, this allows '.' in the middle of inbox names,
(e.g. "foo.bar") as it's common for email addresses, too.
my $pfx;
foreach my $k (keys %$self) {
my $pfx;
foreach my $k (keys %$self) {
- $k =~ /\A(publicinbox\.[\w-]+)\.address\z/ or next;
+ $k =~ m!\A(publicinbox\.[^/]+)\.address\z! or next;
my $v = $self->{$k};
if (ref($v) eq "ARRAY") {
foreach my $alias (@$v) {
my $v = $self->{$k};
if (ref($v) eq "ARRAY") {
foreach my $alias (@$v) {
my ($self, $cb) = @_;
my %seen;
foreach my $k (keys %$self) {
my ($self, $cb) = @_;
my %seen;
foreach my $k (keys %$self) {
- $k =~ /\Apublicinbox\.([A-Z0-9a-z-]+)\.mainrepo\z/ or next;
+ $k =~ m!\Apublicinbox\.([^/]+)\.mainrepo\z! or next;
next if $seen{$1};
$seen{$1} = 1;
my $ibx = lookup_name($self, $1) or next;
next if $seen{$1};
$seen{$1} = 1;
my $ibx = lookup_name($self, $1) or next;
return $rv if $rv;
foreach my $k (keys %$self) {
return $rv if $rv;
foreach my $k (keys %$self) {
- $k =~ /\A(publicinbox\.[\w-]+)\.newsgroup\z/ or next;
+ $k =~ m!\A(publicinbox\.[^/]+)\.newsgroup\z! or next;
my $v = $self->{$k};
my $pfx = $1;
if ($v eq $ng) {
my $v = $self->{$k};
my $pfx = $1;
if ($v eq $ng) {
return unless $rv->{mainrepo};
my $name = $pfx;
$name =~ s/\Apublicinbox\.//;
return unless $rv->{mainrepo};
my $name = $pfx;
$name =~ s/\Apublicinbox\.//;
+
+ # same rules as git.git/remote.c::valid_remote_nick
+ if ($name eq '' || $name =~ m!/! || $name eq '.' || $name eq '..') {
+ warn "invalid inbox name: '$name'\n";
+ return;
+ }
+
$rv->{name} = $name;
$rv->{-pi_config} = $self;
$rv = PublicInbox::Inbox->new($rv);
$rv->{name} = $name;
$rv->{-pi_config} = $self;
$rv = PublicInbox::Inbox->new($rv);