Module: wine Branch: master Commit: 6f2687a389861fbedbbb8c8e3b3c376aef1e3676 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f2687a389861fbedbbb8c8e3b...
Author: Rob Shearman robertshearman@gmail.com Date: Tue Aug 26 20:05:17 2008 +0100
widl: Raise RPC_X_SS_IN_NULL_CONTEXT exception for NULL in-only context handles instead of RPC_X_NULL_REF_PTR.
Based on a patch by Michael Martin.
---
tools/widl/client.c | 8 ++++++++ tools/widl/proxy.c | 5 +++++ 2 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/tools/widl/client.c b/tools/widl/client.c index 779492e..6f148c1 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -188,6 +188,14 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset) indent++; print_client("_Handle = NDRCContextBinding(%s%s);\n", is_ch_ptr ? "*" : "", context_handle_var->name); indent--; + if (is_attr(context_handle_var->attrs, ATTR_IN) && + !is_attr(context_handle_var->attrs, ATTR_OUT)) + { + print_client("else\n"); + indent++; + print_client("RpcRaiseException(RPC_X_SS_IN_NULL_CONTEXT);\n"); + indent--; + } fprintf(client, "\n"); } else if (implicit_handle) diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c index 60ee3c0..c5c79c3 100644 --- a/tools/widl/proxy.c +++ b/tools/widl/proxy.c @@ -199,6 +199,11 @@ int cant_be_null(const var_t *v) const attr_list_t *attrs = v->attrs; const type_t *type = v->type;
+ /* context handles have their own checking so they can be null for the + * purposes of null ref pointer checking */ + if (is_aliaschain_attr(type, ATTR_CONTEXTHANDLE)) + return 0; + if (! attrs && type) { attrs = type->attrs;