Module: wine
Branch: master
Commit: 60eff6d65a51b5fd52d0b22754c88976a244917e
URL: https://source.winehq.org/git/wine.git/?a=commit;h=60eff6d65a51b5fd52d0b227…
Author: Liam Middlebrook <lmiddlebrook(a)nvidia.com>
Date: Mon Jan 25 07:16:34 2021 -0800
winevulkan: Skip commands which are declared but not defined.
Signed-off-by: Liam Middlebrook <lmiddlebrook(a)nvidia.com>
Signed-off-by: Piers Daniell <pdaniell(a)nvidia.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
dlls/winevulkan/make_vulkan | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/dlls/winevulkan/make_vulkan b/dlls/winevulkan/make_vulkan
index 40978a8fc7a..f4c5065ccd9 100755
--- a/dlls/winevulkan/make_vulkan
+++ b/dlls/winevulkan/make_vulkan
@@ -2936,7 +2936,13 @@ class VkRegistry(object):
commands = ext.findall("require/command")
for command in commands:
cmd_name = command.attrib["name"]
- self.funcs[cmd_name].extensions.append(ext_name)
+ # Need to verify that the command is defined, and otherwise skip it.
+ # vkCreateScreenSurfaceQNX is declared in <extensions> but not defined in
+ # <commands>. A command without a definition cannot be enabled, so it's valid for
+ # the XML file to handle this, but because of the manner in which we parse the XML
+ # file we pre-populate from <commands> before we check if a command is enabled.
+ if cmd_name in self.funcs:
+ self.funcs[cmd_name].extensions.append(ext_name)
# Some extensions are not ready or have numbers reserved as a place holder.
if ext.attrib["supported"] == "disabled":
Module: tools
Branch: master
Commit: 4565c96149b43ff1cba49c31dd4693f115946d1e
URL: https://source.winehq.org/git/tools.git/?a=commit;h=4565c96149b43ff1cba49c3…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Tue Jan 26 04:38:49 2021 +0100
testbot/TestWTBS: Allow checking the content of patches.
This is useful for checking that the TestBot assembled all the expected
parts of a patch series, particularly when multiple patch series are
pending.
For instance:
----- TestWTBS -----
a patch.Grep WTBS [12]/4
a patch.GrepV WTBS [34]/4
---- TestWTBS -----
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
testbot/tests/TestWTBS | 52 ++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 42 insertions(+), 10 deletions(-)
diff --git a/testbot/tests/TestWTBS b/testbot/tests/TestWTBS
index 58cbf30..d0e7cab 100755
--- a/testbot/tests/TestWTBS
+++ b/testbot/tests/TestWTBS
@@ -384,6 +384,12 @@ sub LoadTestInfo($)
$TestInfo->{$TaskType}->{"$LogType.$GrepType"} = [ $Array ];
}
}
+
+ my $Array = $TestInfo->{patch}->{$GrepType};
+ next if (!defined $Array);
+ next if (ref($Array) eq "ARRAY");
+ fail("patch.$GrepType should be an array (a lines)");
+ $TestInfo->{patch}->{$GrepType} = [ $Array ];
}
# Automatically check webpatch.Status in simple cases
@@ -643,18 +649,18 @@ sub CheckLogErrors($$$)
}
}
-sub GrepTaskLog($$$$)
+sub GrepFile($$$$;$)
{
- my ($Task, $LogName, $TaskInfo, $LogType) = @_;
+ my ($Key, $Dir, $FileName, $GrepInfo, $GrepPrefix) = @_;
- my @Grep = @{$TaskInfo->{"$LogType.Grep"} || []};
- my @GrepV = @{$TaskInfo->{"$LogType.GrepV"} || []};
+ my @Grep = @{$GrepInfo->{"${GrepPrefix}Grep"} || []};
+ my @GrepV = @{$GrepInfo->{"${GrepPrefix}GrepV"} || []};
return if (!@Grep and !@GrepV);
- if (open(my $LogFile, "<", $Task->GetDir() ."/$LogName"))
+ if (open(my $Fh, "<", "$Dir/$FileName"))
{
my $LineNo;
- foreach my $Line (<$LogFile>)
+ foreach my $Line (<$Fh>)
{
$LineNo++;
my $i = 0;
@@ -662,7 +668,7 @@ sub GrepTaskLog($$$$)
{
if ($Line =~ /$GrepV[$i]/)
{
- fail(TaskKeyStr($Task) ."/$LogName:$LineNo should not match $GrepV[$i]");
+ fail("$Key/$FileName:$LineNo should not match $GrepV[$i]");
splice @GrepV, $i, 1;
next;
}
@@ -680,14 +686,21 @@ sub GrepTaskLog($$$$)
}
last if (!@Grep and !@GrepV);
}
- close($LogFile);
+ close($Fh);
}
foreach my $RegExp (@Grep)
{
- fail(TaskKeyStr($Task) ."/$LogName should match $RegExp");
+ fail("$Key/$FileName should match $RegExp");
}
}
+sub GrepTaskLog($$$$)
+{
+ my ($Task, $LogName, $GrepInfo, $GrepPrefix) = @_;
+
+ return GrepFile(TaskKeyStr($Task), $Task->GetDir(), $LogName, $GrepInfo, $GrepPrefix);
+}
+
=pod
=item <job.Status>
@@ -769,7 +782,7 @@ sub CheckTask($$$$)
CheckLogErrors($LogInfo, $TaskInfo->{"$LogType.errors"},
TaskKeyStr($Task) ."/$LogName");
}
- GrepTaskLog($Task, $LogName, $TaskInfo, $LogType);
+ GrepTaskLog($Task, $LogName, $TaskInfo, "$LogType.");
}
if ($Task->Status eq "completed" and CheckValue($TaskInfo->{TestFailures}))
{
@@ -850,6 +863,21 @@ space-separated list on the VMs matching the specified category.
For instance:
p win.TestUnits cabinet:extract cabinet:fdi
+=item <patch.Grep>
+=item <patch.GrepV>
+
+Verifies the presence or absence of specific regular expressions in the
+job's patch file. Multiple regular expressions can be specified so this uses
+the array type of line ('a').
+
+For instance:
+a patch.Grep WTBS [12]/4
+a patch.GrepV WTBS [34]/4
+
+Assuming that the WTBS patch series contains specific strings that allow
+identifying each part, this checks that the job's patch contains parts 1 and 2
+but not parts 3 and 4.
+
=cut
sub CheckJobTree($;$)
@@ -876,6 +904,10 @@ sub CheckJobTree($;$)
$TestInfo = LoadTestInfo($Step->GetFullFileName());
return if (!$TestInfo);
+ if ($TestInfo->{patch})
+ {
+ GrepFile($Job->Id, $Job->GetDir(), "patch.diff", $TestInfo->{patch});
+ }
}
my $TaskType = $Step->Type eq "build" ? "build" :
Module: tools
Branch: master
Commit: 4f207778973fde274422943653301087e7d8b459
URL: https://source.winehq.org/git/tools.git/?a=commit;h=4f207778973fde274422943…
Author: Francois Gouget <fgouget(a)codeweavers.com>
Date: Tue Jan 26 04:38:47 2021 +0100
testbot/LogUtils: Ignore end-of-line spaces when matching error lines.
End-of-line spaces should be rare but more importantly they don't
materially change the error line and can make it hard to match errors
in TestWTBS.
Signed-off-by: Francois Gouget <fgouget(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
testbot/lib/WineTestBot/LogUtils.pm | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 7971435..7786494 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -1115,8 +1115,11 @@ sub _GetLineKey($)
my ($Line) = @_;
return undef if (!defined $Line);
+ # Remove end-of-line spaces
+ $Line =~ s/ +$//;
+
# Remove the line number
- $Line =~ s/^([_a-z0-9]+\.c:)\d+:( Test (?:failed|succeeded inside todo block): )/$1$2/
+ $Line =~ s/^([_a-z0-9]+\.c:)\d+:( Test (?:failed|succeeded inside todo block):)/$1$2/
# Remove the crash code address: it changes whenever the test is recompiled
or $Line =~ s/^(Unhandled exception: .* code) \(0x[0-9a-fA-F]{8,16}\)\.$/$1/
Module: wine
Branch: master
Commit: 408662379281aa24f41b680f1aba9abf2b40c603
URL: https://source.winehq.org/git/wine.git/?a=commit;h=408662379281aa24f41b680f…
Author: Zebediah Figura <z.figura12(a)gmail.com>
Date: Sat Jan 23 17:42:42 2021 -0600
msi: Return an error if trying to run a 64-bit custom action in a 32-bit prefix.
This matches native behaviour (manually tested).
This allows the Research in Motion (Blackberry) USB and Modem driver to fail
cleanly instead of hanging, if run in a 32-bit prefix.
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
Signed-off-by: Hans Leidekker <hans(a)codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard(a)winehq.org>
---
dlls/msi/custom.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c
index 7ae7e45af29..fb03958eb11 100644
--- a/dlls/msi/custom.c
+++ b/dlls/msi/custom.c
@@ -748,6 +748,13 @@ static msi_custom_action_info *do_msidbCustomActionTypeDll(
if (!ret)
info->arch = (sizeof(void *) == 8 ? SCS_64BIT_BINARY : SCS_32BIT_BINARY);
+ if (info->arch == SCS_64BIT_BINARY && sizeof(void *) == 4 && !is_wow64)
+ {
+ ERR("Attempt to run a 64-bit custom action inside a 32-bit WINEPREFIX.\n");
+ free_custom_action_data( info );
+ return NULL;
+ }
+
custom_start_server(package, info->arch);
info->handle = CreateThread(NULL, 0, custom_client_thread, info, 0, NULL);