Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
004d32da
Commit
004d32da
authored
Feb 27, 2018
by
Sebastian Lackner
Committed by
Alexandre Julliard
Feb 27, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Fix condition mask handling in RtlVerifyVersionInfo.
Signed-off-by:
Nikolay Sivov
<
nsivov@codeweavers.com
>
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
f6b6c94a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
27 deletions
+36
-27
version.c
dlls/kernel32/tests/version.c
+0
-14
version.c
dlls/ntdll/version.c
+36
-13
No files found.
dlls/kernel32/tests/version.c
View file @
004d32da
...
...
@@ -195,9 +195,6 @@ static void test_VerifyVersionInfo(void)
VER_MAJORVERSION
,
VER_EQUAL
,
VER_MINORVERSION
,
VER_LESS
,
0
,
0
,
0
,
0
,
TRUE
,
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
@@ -278,9 +275,6 @@ static void test_VerifyVersionInfo(void)
VER_SERVICEPACKMAJOR
,
VER_EQUAL
,
VER_SERVICEPACKMINOR
,
VER_LESS
,
0
,
0
,
0
,
0
,
TRUE
,
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
@@ -298,8 +292,6 @@ static void test_VerifyVersionInfo(void)
VER_MINORVERSION
,
VER_EQUAL
,
VER_SERVICEPACKMAJOR
,
VER_EQUAL
,
VER_SERVICEPACKMINOR
,
VER_LESS
,
0
,
0
,
TRUE
,
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
@@ -319,7 +311,6 @@ static void test_VerifyVersionInfo(void)
VER_MINORVERSION
,
VER_EQUAL
,
VER_SERVICEPACKMAJOR
,
VER_EQUAL
,
VER_SERVICEPACKMINOR
,
VER_LESS
,
TRUE
,
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
@@ -362,9 +353,6 @@ static void test_VerifyVersionInfo(void)
VER_MAJORVERSION
,
VER_EQUAL
,
VER_SERVICEPACKMAJOR
,
VER_LESS
,
0
,
0
,
0
,
0
,
TRUE
,
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
@@ -382,8 +370,6 @@ static void test_VerifyVersionInfo(void)
VER_MAJORVERSION
,
VER_EQUAL
,
VER_MINORVERSION
,
VER_EQUAL
,
VER_SERVICEPACKMAJOR
,
VER_LESS
,
0
,
0
,
TRUE
},
{
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
,
...
...
dlls/ntdll/version.c
View file @
004d32da
...
...
@@ -657,6 +657,34 @@ BOOLEAN WINAPI RtlGetNtProductType( LPDWORD type )
return
TRUE
;
}
static
inline
UCHAR
version_update_condition
(
UCHAR
*
last_condition
,
UCHAR
condition
)
{
switch
(
*
last_condition
)
{
case
0
:
*
last_condition
=
condition
;
break
;
case
VER_EQUAL
:
if
(
condition
>=
VER_EQUAL
&&
condition
<=
VER_LESS_EQUAL
)
{
*
last_condition
=
condition
;
return
condition
;
}
break
;
case
VER_GREATER
:
case
VER_GREATER_EQUAL
:
if
(
condition
>=
VER_EQUAL
&&
condition
<=
VER_GREATER_EQUAL
)
return
condition
;
break
;
case
VER_LESS
:
case
VER_LESS_EQUAL
:
if
(
condition
==
VER_EQUAL
||
(
condition
>=
VER_LESS
&&
condition
<=
VER_LESS_EQUAL
))
return
condition
;
break
;
}
if
(
!
condition
)
*
last_condition
|=
0x10
;
return
*
last_condition
&
0xf
;
}
static
inline
NTSTATUS
version_compare_values
(
ULONG
left
,
ULONG
right
,
UCHAR
condition
)
{
...
...
@@ -733,38 +761,33 @@ NTSTATUS WINAPI RtlVerifyVersionInfo( const RTL_OSVERSIONINFOEXW *info,
if
(
dwTypeMask
&
(
VER_MAJORVERSION
|
VER_MINORVERSION
|
VER_SERVICEPACKMAJOR
|
VER_SERVICEPACKMINOR
))
{
unsigned
char
condition
=
0
;
unsigned
char
condition
,
last_condition
=
0
;
BOOLEAN
do_next_check
=
TRUE
;
if
(
dwTypeMask
&
VER_MAJORVERSION
)
condition
=
dwlConditionMask
>>
1
*
3
&
0x07
;
else
if
(
dwTypeMask
&
VER_MINORVERSION
)
condition
=
dwlConditionMask
>>
0
*
3
&
0x07
;
else
if
(
dwTypeMask
&
VER_SERVICEPACKMAJOR
)
condition
=
dwlConditionMask
>>
5
*
3
&
0x07
;
else
if
(
dwTypeMask
&
VER_SERVICEPACKMINOR
)
condition
=
dwlConditionMask
>>
4
*
3
&
0x07
;
if
(
dwTypeMask
&
VER_MAJORVERSION
)
{
condition
=
version_update_condition
(
&
last_condition
,
dwlConditionMask
>>
1
*
3
&
0x07
);
status
=
version_compare_values
(
ver
.
dwMajorVersion
,
info
->
dwMajorVersion
,
condition
);
do_next_check
=
(
ver
.
dwMajorVersion
==
info
->
dwMajorVersion
)
&&
((
condition
!=
VER_EQUAL
)
||
(
status
==
STATUS_SUCCESS
));
((
condition
>=
VER_EQUAL
)
&&
(
condition
<=
VER_LESS_EQUAL
));
}
if
((
dwTypeMask
&
VER_MINORVERSION
)
&&
do_next_check
)
{
condition
=
version_update_condition
(
&
last_condition
,
dwlConditionMask
>>
0
*
3
&
0x07
);
status
=
version_compare_values
(
ver
.
dwMinorVersion
,
info
->
dwMinorVersion
,
condition
);
do_next_check
=
(
ver
.
dwMinorVersion
==
info
->
dwMinorVersion
)
&&
((
condition
!=
VER_EQUAL
)
||
(
status
==
STATUS_SUCCESS
));
((
condition
>=
VER_EQUAL
)
&&
(
condition
<=
VER_LESS_EQUAL
));
}
if
((
dwTypeMask
&
VER_SERVICEPACKMAJOR
)
&&
do_next_check
)
{
condition
=
version_update_condition
(
&
last_condition
,
dwlConditionMask
>>
5
*
3
&
0x07
);
status
=
version_compare_values
(
ver
.
wServicePackMajor
,
info
->
wServicePackMajor
,
condition
);
do_next_check
=
(
ver
.
wServicePackMajor
==
info
->
wServicePackMajor
)
&&
((
condition
!=
VER_EQUAL
)
||
(
status
==
STATUS_SUCCESS
));
((
condition
>=
VER_EQUAL
)
&&
(
condition
<=
VER_LESS_EQUAL
));
}
if
((
dwTypeMask
&
VER_SERVICEPACKMINOR
)
&&
do_next_check
)
{
condition
=
version_update_condition
(
&
last_condition
,
dwlConditionMask
>>
4
*
3
&
0x07
);
status
=
version_compare_values
(
ver
.
wServicePackMinor
,
info
->
wServicePackMinor
,
condition
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment