Revise interpretation of directives into operation lists
authorJacob Bachmeyer <jcb@gnu.org>
Thu, 20 Oct 2022 03:47:46 +0000 (22:47 -0500)
committerJacob Bachmeyer <jcb@gnu.org>
Thu, 20 Oct 2022 03:47:46 +0000 (22:47 -0500)
The operation list structure replaces the "order" subkey in elements in
the %info hash; as such, the "replace" option should not produce an entry
in the operation list, instead being a global flag stored in the header.

gatekeeper.pl

index c30f7a8571c2b355ffc4e795bdae797d3bc03e71..fe816dbebe01b57aae589149dddbd2b32ded4a40 100755 (executable)
@@ -1354,7 +1354,7 @@ sub verify_keyring {
 # other things, this lets us use gpgv everywhere, for paranoia's sake.
 #
 
-=item $ops = interpret_directive ( $directive )
+=item $oplist = interpret_directive ( $directive )
 
 Analyze the elements in DIRECTIVE, performing basic validation.  An
 exception is thrown if DIRECTIVE contains invalid element values.
@@ -1371,8 +1371,10 @@ sub interpret_directive {
   my $directive = shift;               # presumed tainted
   my $directive_file_contents = shift; # temporary scaffold
 
-  my %header = ( package => undef, directory => undef, version => undef );
-  my @ops;
+  my %options = ( replace => undef );
+  my %header = ( version => undef, options => \%options,
+                package => undef, directory => undef );
+  my @ops = ([header => \%header]);
   my $have_install = 0;        # can only install one file per directive
   my $filename;
   my $cnt = 0; # TODO: remove this
@@ -1438,12 +1440,13 @@ sub interpret_directive {
       $tainted_val =~ /^(true|false)$/
        or fatal("invalid parameters for replace command: $tainted_val",
                 1,$directive_file_contents);
-      push @ops, [set => replace => ($1 eq 'true')];
+      $options{replace} = ($1 eq 'true');
       $info{"replace"} = $1; #ok.
     } elsif ($tainted_cmd eq 'comment') {
       # Comments are ok, we ignore them
     } elsif (IN_TEST_MODE && $tainted_cmd eq 'no-op') {
       # The testsuite uses a no-op command to validate directive processing.
+      push @ops, ['no-op'];
       $info{'no-op'} = {order => $cnt++};
     } else {
       fatal("Invalid directive line:\n\n  $tainted_cmd $tainted_val",
@@ -1454,8 +1457,6 @@ sub interpret_directive {
       { push @ops, [install => $filename]; $have_install = 1 }
   }
 
-  unshift @ops, [header => \%header];
-
   return \@ops;
 }