chiark / gitweb /
dgit: Reject all git config options containing newlines
[dgit.git] / dgit
diff --git a/dgit b/dgit
index 8df8f761baf9347ce341102b0fd5229aaf4fb03d..a37e89796fd9c784d9588f1f7e054212eabe70d0 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -790,6 +790,9 @@ sub git_get_config ($) {
        @$l==1 or badcfg
            f_ "multiple values for %s (in %s git config)", $c, $src
            if @$l > 1;
+       $l->[0] =~ m/\n/ and badcfg f_
+ "value for config option %s (in %s git config) contains newline(s)!",
+            $c, $src;
        return $l->[0];
     }
     return undef;
@@ -3825,6 +3828,17 @@ sub check_not_dirty () {
        }
     }
 
+    my @cmd = (@git, qw(status -uall --ignored --porcelain));
+    push @cmd, qw(debian/source/format debian/source/options);
+    push @cmd, @forbid;
+
+    my $bad = cmdoutput @cmd;
+    if (length $bad) {
+       fail +(__
+ "you have uncommitted changes to critical files, cannot continue:\n").
+              $bad;
+    }
+
     return if $includedirty;
 
     git_check_unmodified();