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
ab91c011
Commit
ab91c011
authored
Mar 16, 2015
by
Sebastian Lackner
Committed by
Alexandre Julliard
Mar 17, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: RtlFindActivationContextSectionString should accept a NULL pointer as data.
parent
f091ff58
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
59 additions
and
40 deletions
+59
-40
actctx.c
dlls/kernel32/actctx.c
+7
-1
actctx.c
dlls/kernel32/tests/actctx.c
+7
-3
actctx.c
dlls/ntdll/actctx.c
+45
-36
No files found.
dlls/kernel32/actctx.c
View file @
ab91c011
...
...
@@ -227,7 +227,7 @@ BOOL WINAPI FindActCtxSectionStringA(DWORD dwFlags, const GUID* lpExtGuid,
TRACE
(
"%08x %s %u %s %p
\n
"
,
dwFlags
,
debugstr_guid
(
lpExtGuid
),
ulId
,
debugstr_a
(
lpSearchStr
),
pInfo
);
if
(
!
lpSearchStr
)
if
(
!
lpSearchStr
||
!
pInfo
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
...
...
@@ -255,6 +255,12 @@ BOOL WINAPI FindActCtxSectionStringW(DWORD dwFlags, const GUID* lpExtGuid,
UNICODE_STRING
us
;
NTSTATUS
status
;
if
(
!
pInfo
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
RtlInitUnicodeString
(
&
us
,
lpSearchStr
);
if
((
status
=
RtlFindActivationContextSectionString
(
dwFlags
,
lpExtGuid
,
ulId
,
&
us
,
pInfo
)))
{
...
...
dlls/kernel32/tests/actctx.c
View file @
ab91c011
...
...
@@ -2148,9 +2148,13 @@ static void ntdll_find(ULONG section, const char *string_to_find, BOOL should_fi
"RtlFindActivationContextSectionString: unexpected status 0x%x
\n
"
,
ret
);
ret
=
pRtlFindActivationContextSectionString
(
0
,
NULL
,
section
,
&
string_to_findW
,
NULL
);
todo_wine
ok_
(
__FILE__
,
line
)(
ret
==
(
should_find
?
STATUS_SUCCESS
:
STATUS_SXS_KEY_NOT_FOUND
),
"RtlFindActivationContextSectionString: unexpected status 0x%x
\n
"
,
ret
);
if
(
todo
)
todo_wine
ok_
(
__FILE__
,
line
)(
ret
==
(
should_find
?
STATUS_SUCCESS
:
STATUS_SXS_KEY_NOT_FOUND
),
"RtlFindActivationContextSectionString: unexpected status 0x%x
\n
"
,
ret
);
else
ok_
(
__FILE__
,
line
)(
ret
==
(
should_find
?
STATUS_SUCCESS
:
STATUS_SXS_KEY_NOT_FOUND
),
"RtlFindActivationContextSectionString: unexpected status 0x%x
\n
"
,
ret
);
pRtlFreeUnicodeString
(
&
string_to_findW
);
}
...
...
dlls/ntdll/actctx.c
View file @
ab91c011
...
...
@@ -3133,19 +3133,22 @@ static NTSTATUS find_dll_redirection(ACTIVATION_CONTEXT* actctx, const UNICODE_S
index
=
find_string_index
(
actctx
->
dllredirect_section
,
name
);
if
(
!
index
)
return
STATUS_SXS_KEY_NOT_FOUND
;
dll
=
get_dllredirect_data
(
actctx
,
index
);
if
(
data
)
{
dll
=
get_dllredirect_data
(
actctx
,
index
);
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
dll
;
data
->
ulLength
=
dll
->
size
;
data
->
lpSectionGlobalData
=
NULL
;
data
->
ulSectionGlobalDataLength
=
0
;
data
->
lpSectionBase
=
actctx
->
dllredirect_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
dllredirect_section
);
data
->
hActCtx
=
NULL
;
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
dll
;
data
->
ulLength
=
dll
->
size
;
data
->
lpSectionGlobalData
=
NULL
;
data
->
ulSectionGlobalDataLength
=
0
;
data
->
lpSectionBase
=
actctx
->
dllredirect_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
dllredirect_section
);
data
->
hActCtx
=
NULL
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
}
return
STATUS_SUCCESS
;
}
...
...
@@ -3342,20 +3345,23 @@ static NTSTATUS find_window_class(ACTIVATION_CONTEXT* actctx, const UNICODE_STRI
if
(
!
index
)
return
STATUS_SXS_KEY_NOT_FOUND
;
class
=
get_wndclass_data
(
actctx
,
index
);
if
(
data
)
{
class
=
get_wndclass_data
(
actctx
,
index
);
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
class
;
/* full length includes string length with nulls */
data
->
ulLength
=
class
->
size
+
class
->
name_len
+
class
->
module_len
+
2
*
sizeof
(
WCHAR
);
data
->
lpSectionGlobalData
=
NULL
;
data
->
ulSectionGlobalDataLength
=
0
;
data
->
lpSectionBase
=
actctx
->
wndclass_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
wndclass_section
);
data
->
hActCtx
=
NULL
;
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
class
;
/* full length includes string length with nulls */
data
->
ulLength
=
class
->
size
+
class
->
name_len
+
class
->
module_len
+
2
*
sizeof
(
WCHAR
);
data
->
lpSectionGlobalData
=
NULL
;
data
->
ulSectionGlobalDataLength
=
0
;
data
->
lpSectionBase
=
actctx
->
wndclass_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
wndclass_section
);
data
->
hActCtx
=
NULL
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
}
return
STATUS_SUCCESS
;
}
...
...
@@ -4397,19 +4403,22 @@ static NTSTATUS find_progid_redirection(ACTIVATION_CONTEXT* actctx, const UNICOD
index
=
find_string_index
(
actctx
->
progid_section
,
name
);
if
(
!
index
)
return
STATUS_SXS_KEY_NOT_FOUND
;
progid
=
get_progid_data
(
actctx
,
index
);
if
(
data
)
{
progid
=
get_progid_data
(
actctx
,
index
);
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
progid
;
data
->
ulLength
=
progid
->
size
;
data
->
lpSectionGlobalData
=
(
BYTE
*
)
actctx
->
progid_section
+
actctx
->
progid_section
->
global_offset
;
data
->
ulSectionGlobalDataLength
=
actctx
->
progid_section
->
global_len
;
data
->
lpSectionBase
=
actctx
->
progid_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
progid_section
);
data
->
hActCtx
=
NULL
;
data
->
ulDataFormatVersion
=
1
;
data
->
lpData
=
progid
;
data
->
ulLength
=
progid
->
size
;
data
->
lpSectionGlobalData
=
(
BYTE
*
)
actctx
->
progid_section
+
actctx
->
progid_section
->
global_offset
;
data
->
ulSectionGlobalDataLength
=
actctx
->
progid_section
->
global_len
;
data
->
lpSectionBase
=
actctx
->
progid_section
;
data
->
ulSectionTotalLength
=
RtlSizeHeap
(
GetProcessHeap
(),
0
,
actctx
->
progid_section
);
data
->
hActCtx
=
NULL
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
if
(
data
->
cbSize
>=
FIELD_OFFSET
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
+
sizeof
(
ULONG
))
data
->
ulAssemblyRosterIndex
=
index
->
rosterindex
;
}
return
STATUS_SUCCESS
;
}
...
...
@@ -4441,7 +4450,7 @@ static NTSTATUS find_string(ACTIVATION_CONTEXT* actctx, ULONG section_kind,
if
(
status
!=
STATUS_SUCCESS
)
return
status
;
if
(
flags
&
FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX
)
if
(
data
&&
(
flags
&
FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX
)
)
{
actctx_addref
(
actctx
);
data
->
hActCtx
=
actctx
;
...
...
@@ -5008,7 +5017,7 @@ NTSTATUS WINAPI RtlFindActivationContextSectionString( ULONG flags, const GUID *
FIXME
(
"unknown flags %08x
\n
"
,
flags
);
return
STATUS_INVALID_PARAMETER
;
}
if
(
!
data
||
data
->
cbSize
<
offsetof
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
||
if
(
(
data
&&
data
->
cbSize
<
offsetof
(
ACTCTX_SECTION_KEYED_DATA
,
ulAssemblyRosterIndex
)
)
||
!
section_name
||
!
section_name
->
Buffer
)
{
WARN
(
"invalid parameter
\n
"
);
...
...
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