[PATCH 1/2] testbot/Submit: Preserve the uploaded file on the first submit page.

Francois Gouget fgouget at codeweavers.com
Mon Sep 30 20:36:59 CDT 2019


The file input type cannot take an initial path for obvious security
reasons. So when going back to the first page show the currently
selected filename along with an option to unset it.

Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
 testbot/web/Submit.pl | 75 ++++++++++++++++++++++++++++++-------------
 1 file changed, 53 insertions(+), 22 deletions(-)

diff --git a/testbot/web/Submit.pl b/testbot/web/Submit.pl
index 2cc9c8022..b9ead7451 100644
--- a/testbot/web/Submit.pl
+++ b/testbot/web/Submit.pl
@@ -58,7 +58,7 @@ sub _Upload($)
 {
   my ($self) = @_;
 
-  my $Src = $self->CGI->upload("FileName");
+  my $Src = $self->CGI->upload("Upload");
   if (defined $Src)
   {
     my $OldUMask = umask(002);
@@ -76,7 +76,7 @@ sub _Upload($)
     {
       umask($OldUMask);
       delete $self->{FileName};
-      $self->{ErrField} = "FileName";
+      $self->{ErrField} = "Upload";
       $self->{ErrMessage} = "Unable to save the uploaded file";
       return undef;
     }
@@ -84,7 +84,7 @@ sub _Upload($)
   else
   {
     delete $self->{FileName};
-    $self->{ErrField} = "FileName";
+    $self->{ErrField} = "Upload";
     $self->{ErrMessage} = "Unable to upload the file";
     return undef;
   }
@@ -476,7 +476,8 @@ sub GetHeaderText($)
   }
   elsif ($self->{Page} == 1)
   {
-    return "Specify the patch file that you want to upload and submit " .
+    return defined $self->{FileName} ? "" :
+           "Specify the patch file that you want to upload and submit " .
            "for testing.<br>\n" .
            "You can also specify a Windows .exe file, this would normally be " .
            "a Wine test executable that you cross-compiled."
@@ -539,9 +540,18 @@ sub GenerateFields($)
   elsif ($self->{Page} == 1)
   {
     print "<div class='ItemProperty'><label>File</label>",
-          "<div class='ItemValue'>",
-          "<input type='file' name='FileName' size='64' maxlength='64' />",
-          " <span class='Required'>*</span></div></div>\n";
+          "<div class='ItemValue'>";
+    if (defined $self->{FileName})
+    {
+      $self->_GenerateStateField("FileName");
+      print "<input type='submit' name='Action' value='Unset'/> $self->{FileName}";
+    }
+    else
+    {
+      print "<input type='file' name='Upload' size='64' maxlength='64'/>",
+            " <span class='Required'>*</span>";
+    }
+    print  "</div></div>\n";
 
     my $Branches = CreateBranches();
     if (!defined $self->{Branch})
@@ -727,12 +737,42 @@ sub _SetPage($$)
   delete $self->{PropertyDescriptors};
 }
 
+sub OnUnset($)
+{
+  my ($self) = @_;
+
+  if (!$self->_ValidateFileName())
+  {
+    # Ignore the error. What counts is not using a suspicious FileName.
+    delete $self->{ErrField};
+    delete $self->{ErrMessage};
+  }
+  elsif (defined $self->{FileName})
+  {
+    my $StagingFilePath = $self->_GetStagingFilePath();
+    unlink($StagingFilePath) if ($StagingFilePath);
+    delete $self->{FileName};
+  }
+  delete $self->{TestExecutable};
+  delete $self->{CmdLineArg};
+
+  return 1;
+}
+
 sub OnPage1Next($)
 {
   my ($self) = @_;
 
-  if (!$self->_ValidateFileName() or !$self->_Upload() or !$self->Validate() or
-      !$self->_ValidateVMSelection("deselect"))
+  if (defined $self->{FileName})
+  {
+    return undef if (!$self->_ValidateFileName());
+  }
+  else
+  {
+    $self->{FileName} = $self->GetParam("Upload");
+    return undef if (!$self->_ValidateFileName() or !$self->_Upload());
+  }
+  if (!$self->Validate() or !$self->_ValidateVMSelection("deselect"))
   {
     return undef;
   }
@@ -779,19 +819,6 @@ sub OnPage2Prev($)
 {
   my ($self) = @_;
 
-  if (!$self->_ValidateFileName())
-  {
-    # Ignore the error. What counts is not using a suspicious FileName.
-    delete $self->{ErrField};
-    delete $self->{ErrMessage};
-  }
-  elsif (defined $self->{FileName})
-  {
-    my $StagingFilePath = $self->_GetStagingFilePath();
-    unlink($StagingFilePath) if ($StagingFilePath);
-    delete $self->{FileName};
-  }
-
   $self->_SetPage(1);
   return 1;
 }
@@ -1076,6 +1103,10 @@ sub OnAction($$)
   {
     return $self->{Page} == 3 ? $self->OnPage3Prev() : $self->OnPage2Prev();
   }
+  elsif ($Action eq "Unset")
+  {
+    return $self->OnUnset();
+  }
   elsif ($Action eq "Submit")
   {
     return $self->OnSubmit();
-- 
2.20.1




More information about the wine-devel mailing list