All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
Due to how includes work, a line number is not very helpful;
printing the actual included content is better.
Some associated refactoring.
(What I wouldn't give for a haskell where clause right about now..)
-sub trusterror {
- my ($err, $file, $line, $url)=@_;
-
- if (defined $url) {
- die "$err in untrusted $url line $line\n".
- "(To trust this url, --trust-all can be used; but please use caution;\n".
- "this can allow arbitrary code execution!)\n";
- }
- else {
- die "$err in untrusted $file line $line\n".
- "(To trust this file, list it in ~/.mrtrust.)\n";
- }
-}
-
my %loaded;
sub loadconfig {
my $f=shift;
my %loaded;
sub loadconfig {
my $f=shift;
# Keep track of the current line in the config file;
# when a file is included track the current line from the include.
# Keep track of the current line in the config file;
# when a file is included track the current line from the include.
my $nextline = sub {
if ($included) {
my $nextline = sub {
if ($included) {
$included--;
}
else {
$included=undef;
$included--;
}
else {
$included=undef;
- $includeline=0;
- $line++;
- my $l=shift @lines;
- chomp $l;
- return $l
+ $line=shift @lines;
+ chomp $line;
+ return $line;
};
my $lineerror = sub {
my $msg=shift;
if (defined $included) {
};
my $lineerror = sub {
my $msg=shift;
if (defined $included) {
- die "mr: $f line $line include line $includeline: $msg\n";
+ die "mr: $f line $lineno included line '$line': $msg\n";
+ }
+ else {
+ die "mr: $f line $lineno: $msg\n";
+ }
+ };
+ my $trusterror = sub {
+ my $msg=shift;
+ my ($err, $file, $lineno, $url)=@_;
+
+ if (defined $bootstrap_url) {
+ die "mr: $err in untrusted $bootstrap_url line $lineno\n".
+ "(To trust this url, --trust-all can be used; but please use caution;\n".
+ "this can allow arbitrary code execution!)\n";
- die "mr: $f line $line: $msg\n";
+ die "mr: $err in untrusted $file line $lineno\n".
+ "(To trust this file, list it in ~/.mrtrust.)\n";
$_=$nextline->();
if (! $trusted && /[[:cntrl:]]/) {
$_=$nextline->();
if (! $trusted && /[[:cntrl:]]/) {
- trusterror("mr: illegal control character", $f, $line, $bootstrap_url);
+ $trusterror->("illegal control character");
}
next if /^\s*\#/ || /^\s*$/;
}
next if /^\s*\#/ || /^\s*$/;
if (! is_trusted_repo($section) ||
$section eq 'ALIAS' ||
$section eq 'DEFAULT') {
if (! is_trusted_repo($section) ||
$section eq 'ALIAS' ||
$section eq 'DEFAULT') {
- trusterror("mr: illegal section \"[$section]\"", $f, $line, $bootstrap_url)
+ $trusterror->("illegal section \"[$section]\"");
}
}
$section=expandenv($section) if $trusted;
}
}
$section=expandenv($section) if $trusted;
# settings in specific known-safe formats.
if ($parameter eq 'checkout') {
if (! is_trusted_checkout($value)) {
# settings in specific known-safe formats.
if ($parameter eq 'checkout') {
if (! is_trusted_checkout($value)) {
- trusterror("mr: illegal checkout command \"$value\"", $f, $line, $bootstrap_url);
+ $trusterror->("illegal checkout command \"$value\"");
}
}
elsif ($parameter eq 'order') {
}
}
elsif ($parameter eq 'order') {
- trusterror("mr: illegal setting \"$parameter=$value\"", $f, $line, $bootstrap_url);
+ $trusterror->("illegal setting \"$parameter=$value\"");