2007-01-09 Robert Jordan <robertj@gmx.net>
authorRobert Jordan <robertj@gmx.net>
Tue, 9 Jan 2007 22:13:26 +0000 (22:13 -0000)
committerRobert Jordan <robertj@gmx.net>
Tue, 9 Jan 2007 22:13:26 +0000 (22:13 -0000)
* marshal.c (mono_delegate_end_invoke): Add check for unpaired asyc
result arguments (someDelegate.EndInvoke (unrelatedAres)).

svn path=/trunk/mono/; revision=70742

mono/metadata/ChangeLog
mono/metadata/marshal.c

index d574db54389827208a3c0cb7f88b76e90396b746..fd4cae41dab57de31f182137006d053945fac378 100644 (file)
@@ -1,3 +1,8 @@
+2007-01-09  Robert Jordan  <robertj@gmx.net>
+
+       * marshal.c (mono_delegate_end_invoke): Add check for unpaired asyc
+       result arguments (someDelegate.EndInvoke (unrelatedAres)).
+
 2007-01-09  Raja R Harinath  <rharinath@novell.com>
 
        * class-internals.h (_MonoInflatedGenericClass.is_initialized): Remove.
index d84d93f5d0609ef1dfce9ae4d22cede4bfab670a..ea1c0ab95463852ea8346f0379e4baec30c5790d 100644 (file)
@@ -2957,6 +2957,12 @@ mono_delegate_end_invoke (MonoDelegate *delegate, gpointer *params)
        ares = mono_array_get (msg->args, gpointer, sig->param_count - 1);
        g_assert (ares);
 
+       if (ares->async_delegate != delegate && mono_get_runtime_info ()->framework_version [0] >= '2') {
+               mono_raise_exception (mono_get_exception_invalid_operation (
+                       "The IAsyncResult object provided does not match this delegate."));
+               return NULL;
+       }
+
        if (delegate->target && mono_object_class (delegate->target) == mono_defaults.transparent_proxy_class) {
                MonoTransparentProxy* tp = (MonoTransparentProxy *)delegate->target;
                msg = (MonoMethodMessage *)mono_object_new (domain, mono_defaults.mono_method_message_class);