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
4d8ee6bb
Commit
4d8ee6bb
authored
Apr 01, 2024
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
widl: Add /robust flags in correlation descriptors.
parent
896b4f05
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
31 additions
and
22 deletions
+31
-22
ndr_marshall.c
dlls/rpcrt4/ndr_marshall.c
+3
-8
ndr_typelib.c
dlls/rpcrt4/ndr_typelib.c
+7
-5
client.c
tools/widl/client.c
+4
-0
server.c
tools/widl/server.c
+5
-0
typegen.c
tools/widl/typegen.c
+12
-9
No files found.
dlls/rpcrt4/ndr_marshall.c
View file @
4d8ee6bb
...
@@ -7259,15 +7259,13 @@ NDR_SCONTEXT WINAPI NdrServerContextNewUnmarshall(PMIDL_STUB_MESSAGE pStubMsg,
...
@@ -7259,15 +7259,13 @@ NDR_SCONTEXT WINAPI NdrServerContextNewUnmarshall(PMIDL_STUB_MESSAGE pStubMsg,
*/
*/
void
WINAPI
NdrCorrelationInitialize
(
PMIDL_STUB_MESSAGE
pStubMsg
,
void
*
pMemory
,
ULONG
CacheSize
,
ULONG
Flags
)
void
WINAPI
NdrCorrelationInitialize
(
PMIDL_STUB_MESSAGE
pStubMsg
,
void
*
pMemory
,
ULONG
CacheSize
,
ULONG
Flags
)
{
{
static
int
once
;
TRACE
(
"(%p, %p, %ld, 0x%lx)
\n
"
,
pStubMsg
,
pMemory
,
CacheSize
,
Flags
);
if
(
!
once
++
)
FIXME
(
"(%p, %p, %ld, 0x%lx): semi-stub
\n
"
,
pStubMsg
,
pMemory
,
CacheSize
,
Flags
);
if
(
pStubMsg
->
CorrDespIncrement
==
0
)
if
(
pStubMsg
->
CorrDespIncrement
==
0
)
pStubMsg
->
CorrDespIncrement
=
2
;
/* size of the normal (non-range) /robust payload */
pStubMsg
->
CorrDespIncrement
=
2
;
/* size of the normal (non-range) /robust payload */
pStubMsg
->
fHasNewCorrDesc
=
TRUE
;
pStubMsg
->
fHasNewCorrDesc
=
TRUE
;
pStubMsg
->
pCorrInfo
=
pMemory
;
}
}
/***********************************************************************
/***********************************************************************
...
@@ -7300,8 +7298,5 @@ void WINAPI NdrCorrelationPass(PMIDL_STUB_MESSAGE pStubMsg)
...
@@ -7300,8 +7298,5 @@ void WINAPI NdrCorrelationPass(PMIDL_STUB_MESSAGE pStubMsg)
*/
*/
void
WINAPI
NdrCorrelationFree
(
PMIDL_STUB_MESSAGE
pStubMsg
)
void
WINAPI
NdrCorrelationFree
(
PMIDL_STUB_MESSAGE
pStubMsg
)
{
{
static
int
once
;
/* FIXME: free memory */
if
(
!
once
++
)
FIXME
(
"(%p): stub
\n
"
,
pStubMsg
);
}
}
dlls/rpcrt4/ndr_typelib.c
View file @
4d8ee6bb
...
@@ -640,7 +640,9 @@ static size_t write_array_tfs(ITypeInfo *typeinfo, unsigned char *str,
...
@@ -640,7 +640,9 @@ static size_t write_array_tfs(ITypeInfo *typeinfo, unsigned char *str,
{
{
WRITE_SHORT
(
str
,
*
len
,
size
);
WRITE_SHORT
(
str
,
*
len
,
size
);
WRITE_INT
(
str
,
*
len
,
0xffffffff
);
/* conformance */
WRITE_INT
(
str
,
*
len
,
0xffffffff
);
/* conformance */
WRITE_SHORT
(
str
,
*
len
,
0
);
WRITE_INT
(
str
,
*
len
,
0xffffffff
);
/* variance */
WRITE_INT
(
str
,
*
len
,
0xffffffff
);
/* variance */
WRITE_SHORT
(
str
,
*
len
,
0
);
}
}
else
else
{
{
...
@@ -1099,18 +1101,18 @@ static void write_proc_func_header(ITypeInfo *typeinfo, FUNCDESC *desc,
...
@@ -1099,18 +1101,18 @@ static void write_proc_func_header(ITypeInfo *typeinfo, FUNCDESC *desc,
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* constant_client_buffer_size */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* constant_client_buffer_size */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* constant_server_buffer_size */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* constant_server_buffer_size */
#ifdef __x86_64__
WRITE_CHAR
(
proc
,
*
proclen
,
0x47
);
/* HasExtensions | HasReturn | ClientMustSize | ServerMustSize */
WRITE_CHAR
(
proc
,
*
proclen
,
0x47
);
/* HasExtensions | HasReturn | ClientMustSize | ServerMustSize */
#else
WRITE_CHAR
(
proc
,
*
proclen
,
0x07
);
/* HasReturn | ClientMustSize | ServerMustSize */
#endif
WRITE_CHAR
(
proc
,
*
proclen
,
desc
->
cParams
+
1
);
/* incl. return value */
WRITE_CHAR
(
proc
,
*
proclen
,
desc
->
cParams
+
1
);
/* incl. return value */
#ifdef __x86_64__
#ifdef __x86_64__
WRITE_CHAR
(
proc
,
*
proclen
,
10
);
/* extension size */
WRITE_CHAR
(
proc
,
*
proclen
,
10
);
/* extension size */
WRITE_CHAR
(
proc
,
*
proclen
,
0
);
/* INTERPRETER_OPT_FLAGS2 */
#else
WRITE_CHAR
(
proc
,
*
proclen
,
8
);
/* extension size */
#endif
WRITE_CHAR
(
proc
,
*
proclen
,
1
);
/* HasNewCorrDesc */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* ClientCorrHint */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* ClientCorrHint */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* ServerCorrHint */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* ServerCorrHint */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* NotifyIndex */
WRITE_SHORT
(
proc
,
*
proclen
,
0
);
/* NotifyIndex */
#ifdef __x86_64__
for
(
param_idx
=
0
;
param_idx
<
desc
->
cParams
&&
param_idx
<
3
;
param_idx
++
)
for
(
param_idx
=
0
;
param_idx
<
desc
->
cParams
&&
param_idx
<
3
;
param_idx
++
)
{
{
basetype
=
get_basetype
(
typeinfo
,
&
desc
->
lprgelemdescParam
[
param_idx
].
tdesc
);
basetype
=
get_basetype
(
typeinfo
,
&
desc
->
lprgelemdescParam
[
param_idx
].
tdesc
);
...
...
tools/widl/client.c
View file @
4d8ee6bb
...
@@ -106,6 +106,7 @@ static void write_function_stub( const type_t *iface, const var_t *func,
...
@@ -106,6 +106,7 @@ static void write_function_stub( const type_t *iface, const var_t *func,
if
(
has_full_pointer
)
if
(
has_full_pointer
)
write_full_pointer_free
(
client
,
indent
,
func
);
write_full_pointer_free
(
client
,
indent
,
func
);
if
(
interpreted_mode
)
print_client
(
"NdrCorrelationFree(&__frame->_StubMsg);
\n
"
);
print_client
(
"NdrFreeBuffer(&__frame->_StubMsg);
\n
"
);
print_client
(
"NdrFreeBuffer(&__frame->_StubMsg);
\n
"
);
if
(
explicit_fc
==
FC_BIND_GENERIC
)
if
(
explicit_fc
==
FC_BIND_GENERIC
)
...
@@ -134,6 +135,7 @@ static void write_function_stub( const type_t *iface, const var_t *func,
...
@@ -134,6 +135,7 @@ static void write_function_stub( const type_t *iface, const var_t *func,
write_type_decl
(
client
,
&
retval
->
declspec
,
retval
->
name
);
write_type_decl
(
client
,
&
retval
->
declspec
,
retval
->
name
);
fprintf
(
client
,
";
\n
"
);
fprintf
(
client
,
";
\n
"
);
}
}
if
(
interpreted_mode
)
print_client
(
"ULONG _NdrCorrCache[256];
\n
"
);
print_client
(
"RPC_MESSAGE _RpcMessage;
\n
"
);
print_client
(
"RPC_MESSAGE _RpcMessage;
\n
"
);
if
(
handle_var
)
if
(
handle_var
)
...
@@ -213,6 +215,8 @@ static void write_function_stub( const type_t *iface, const var_t *func,
...
@@ -213,6 +215,8 @@ static void write_function_stub( const type_t *iface, const var_t *func,
}
}
break
;
break
;
}
}
if
(
interpreted_mode
)
print_client
(
"NdrCorrelationInitialize(&__frame->_StubMsg, _NdrCorrCache, sizeof(_NdrCorrCache), 0);
\n
"
);
write_remoting_arguments
(
client
,
indent
,
func
,
""
,
PASS_IN
,
PHASE_BUFFERSIZE
);
write_remoting_arguments
(
client
,
indent
,
func
,
""
,
PASS_IN
,
PHASE_BUFFERSIZE
);
...
...
tools/widl/server.c
View file @
4d8ee6bb
...
@@ -69,6 +69,8 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
...
@@ -69,6 +69,8 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
print_server
(
"static void __finally_%s_%s("
,
iface
->
name
,
get_name
(
func
));
print_server
(
"static void __finally_%s_%s("
,
iface
->
name
,
get_name
(
func
));
fprintf
(
server
,
" struct __frame_%s_%s *__frame )
\n
{
\n
"
,
iface
->
name
,
get_name
(
func
));
fprintf
(
server
,
" struct __frame_%s_%s *__frame )
\n
{
\n
"
,
iface
->
name
,
get_name
(
func
));
if
(
interpreted_mode
)
print_server
(
"NdrCorrelationFree(&__frame->_StubMsg);
\n
"
);
indent
++
;
indent
++
;
write_remoting_arguments
(
server
,
indent
,
func
,
"__frame->"
,
PASS_OUT
,
PHASE_FREE
);
write_remoting_arguments
(
server
,
indent
,
func
,
"__frame->"
,
PASS_OUT
,
PHASE_FREE
);
...
@@ -87,6 +89,7 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
...
@@ -87,6 +89,7 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
fprintf
(
server
,
"{
\n
"
);
fprintf
(
server
,
"{
\n
"
);
indent
++
;
indent
++
;
print_server
(
"struct __frame_%s_%s __f, * const __frame = &__f;
\n
"
,
iface
->
name
,
get_name
(
func
));
print_server
(
"struct __frame_%s_%s __f, * const __frame = &__f;
\n
"
,
iface
->
name
,
get_name
(
func
));
if
(
interpreted_mode
)
print_server
(
"ULONG _NdrCorrCache[256];
\n
"
);
if
(
has_out_arg_or_return
(
func
))
print_server
(
"RPC_STATUS _Status;
\n
"
);
if
(
has_out_arg_or_return
(
func
))
print_server
(
"RPC_STATUS _Status;
\n
"
);
fprintf
(
server
,
"
\n
"
);
fprintf
(
server
,
"
\n
"
);
...
@@ -113,6 +116,8 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
...
@@ -113,6 +116,8 @@ static void write_function_stub(const type_t *iface, const var_t *func, unsigned
print_server
(
"RpcTryExcept
\n
"
);
print_server
(
"RpcTryExcept
\n
"
);
print_server
(
"{
\n
"
);
print_server
(
"{
\n
"
);
indent
++
;
indent
++
;
if
(
interpreted_mode
)
print_server
(
"NdrCorrelationInitialize(&__frame->_StubMsg, _NdrCorrCache, sizeof(_NdrCorrCache), 0);
\n
"
);
if
(
has_full_pointer
)
if
(
has_full_pointer
)
write_full_pointer_init
(
server
,
indent
,
func
,
TRUE
);
write_full_pointer_init
(
server
,
indent
,
func
,
TRUE
);
...
...
tools/widl/typegen.c
View file @
4d8ee6bb
...
@@ -1342,7 +1342,7 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
...
@@ -1342,7 +1342,7 @@ static void write_proc_func_interp( FILE *file, int indent, const type_t *iface,
const
var_t
*
handle_var
=
get_func_handle_var
(
iface
,
func
,
&
explicit_fc
,
&
implicit_fc
);
const
var_t
*
handle_var
=
get_func_handle_var
(
iface
,
func
,
&
explicit_fc
,
&
implicit_fc
);
unsigned
char
oi_flags
=
Oi_HAS_RPCFLAGS
|
Oi_USE_NEW_INIT_ROUTINES
;
unsigned
char
oi_flags
=
Oi_HAS_RPCFLAGS
|
Oi_USE_NEW_INIT_ROUTINES
;
unsigned
char
oi2_flags
=
get_func_oi2_flags
(
func
);
unsigned
char
oi2_flags
=
get_func_oi2_flags
(
func
);
unsigned
char
ext_flags
=
0
;
unsigned
char
ext_flags
=
0
x01
;
/* HasNewCorrDesc */
unsigned
int
rpc_flags
=
get_rpc_flags
(
func
->
attrs
);
unsigned
int
rpc_flags
=
get_rpc_flags
(
func
->
attrs
);
unsigned
int
nb_args
=
0
;
unsigned
int
nb_args
=
0
;
unsigned
int
stack_size
=
0
;
unsigned
int
stack_size
=
0
;
...
@@ -1621,6 +1621,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
...
@@ -1621,6 +1621,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
{
{
unsigned
char
operator_type
=
0
;
unsigned
char
operator_type
=
0
;
unsigned
char
conftype
=
FC_NORMAL_CONFORMANCE
;
unsigned
char
conftype
=
FC_NORMAL_CONFORMANCE
;
unsigned
short
robust_flags
=
0
;
const
char
*
conftype_string
=
"field"
;
const
char
*
conftype_string
=
"field"
;
const
expr_t
*
subexpr
;
const
expr_t
*
subexpr
;
const
type_t
*
iface
=
NULL
;
const
type_t
*
iface
=
NULL
;
...
@@ -1629,7 +1630,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
...
@@ -1629,7 +1630,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
if
(
!
expr
)
if
(
!
expr
)
{
{
print_file
(
file
,
2
,
"NdrFcLong(0xffffffff),
\t
/* -1 */
\n
"
);
print_file
(
file
,
2
,
"NdrFcLong(0xffffffff),
\t
/* -1 */
\n
"
);
return
4
;
goto
done
;
}
}
if
(
expr
->
is_const
)
if
(
expr
->
is_const
)
...
@@ -1643,8 +1644,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
...
@@ -1643,8 +1644,7 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
FC_CONSTANT_CONFORMANCE
,
expr
->
cval
);
FC_CONSTANT_CONFORMANCE
,
expr
->
cval
);
print_file
(
file
,
2
,
"0x%x,
\n
"
,
expr
->
cval
>>
16
);
print_file
(
file
,
2
,
"0x%x,
\n
"
,
expr
->
cval
>>
16
);
print_file
(
file
,
2
,
"NdrFcShort(0x%hx),
\n
"
,
(
unsigned
short
)
expr
->
cval
);
print_file
(
file
,
2
,
"NdrFcShort(0x%hx),
\n
"
,
(
unsigned
short
)
expr
->
cval
);
goto
done
;
return
4
;
}
}
if
(
!
cont_type
)
/* top-level conformance */
if
(
!
cont_type
)
/* top-level conformance */
...
@@ -1854,7 +1854,10 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
...
@@ -1854,7 +1854,10 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *cont_type,
print_file
(
file
,
2
,
"0x0,
\n
"
);
print_file
(
file
,
2
,
"0x0,
\n
"
);
print_file
(
file
,
2
,
"NdrFcShort(0x0),
\n
"
);
print_file
(
file
,
2
,
"NdrFcShort(0x0),
\n
"
);
}
}
return
4
;
done:
if
(
!
interpreted_mode
)
return
4
;
print_file
(
file
,
2
,
"NdrFcShort(0x%hx),
\n
"
,
robust_flags
);
return
6
;
}
}
/* return size and start offset of a data field based on current offset */
/* return size and start offset of a data field based on current offset */
...
@@ -2495,15 +2498,15 @@ static void write_descriptors(FILE *file, type_t *type, unsigned int *tfsoff)
...
@@ -2495,15 +2498,15 @@ static void write_descriptors(FILE *file, type_t *type, unsigned int *tfsoff)
unsigned
int
absoff
=
ft
->
typestring_offset
;
unsigned
int
absoff
=
ft
->
typestring_offset
;
if
(
is_attr
(
ft
->
attrs
,
ATTR_SWITCHTYPE
))
if
(
is_attr
(
ft
->
attrs
,
ATTR_SWITCHTYPE
))
absoff
+=
8
;
/* we already have a corr descr, skip it */
absoff
+=
8
;
/* we already have a corr descr, skip it */
reloff
=
absoff
-
(
*
tfsoff
+
6
);
print_file
(
file
,
0
,
"/* %d */
\n
"
,
*
tfsoff
);
print_file
(
file
,
0
,
"/* %d */
\n
"
,
*
tfsoff
);
print_file
(
file
,
2
,
"0x%x,
\t
/* FC_NON_ENCAPSULATED_UNION */
\n
"
,
FC_NON_ENCAPSULATED_UNION
);
print_file
(
file
,
2
,
"0x%x,
\t
/* FC_NON_ENCAPSULATED_UNION */
\n
"
,
FC_NON_ENCAPSULATED_UNION
);
print_file
(
file
,
2
,
"0x%x,
\t
/* FIXME: always FC_LONG */
\n
"
,
FC_LONG
);
print_file
(
file
,
2
,
"0x%x,
\t
/* FIXME: always FC_LONG */
\n
"
,
FC_LONG
);
write_conf_or_var_desc
(
file
,
current_structure
,
offset
,
ft
,
*
tfsoff
+=
2
+
write_conf_or_var_desc
(
file
,
current_structure
,
offset
,
ft
,
get_attrp
(
f
->
attrs
,
ATTR_SWITCHIS
));
get_attrp
(
f
->
attrs
,
ATTR_SWITCHIS
));
reloff
=
absoff
-
*
tfsoff
;
print_file
(
file
,
2
,
"NdrFcShort(0x%hx),
\t
/* Offset= %hd (%u) */
\n
"
,
print_file
(
file
,
2
,
"NdrFcShort(0x%hx),
\t
/* Offset= %hd (%u) */
\n
"
,
(
unsigned
short
)
reloff
,
reloff
,
absoff
);
(
unsigned
short
)
reloff
,
reloff
,
absoff
);
*
tfsoff
+=
8
;
*
tfsoff
+=
2
;
}
}
offset
+=
size
;
offset
+=
size
;
}
}
...
...
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