Hello.

I've seen that this patch is in "pending" state, and I would like to know what is the problem with it. Also, if commenting the tests isn't a policy you want to enforce (that I would understand), I'm ready to skip them on wine, but how to?

Those tests were made with midl from Visual Studio 10, with or without /Os option, and ran smoothly.
http://www.winehq.org/pipermail/wine-patches/2011-August/106200.html

Regards.
Jérôme.

Le 06/09/2011 00:50, Jérôme Gardou a écrit :
Also, the added function which seems to be useless permits to detect the problem that the next patch fixes. Enable -Oif, and the test of server.c line 947 (after patch application) will fail.
---
dlls/rpcrt4/tests/server.c | 46 ++++++++++++++++++++++++++++++++++++++++++
  dlls/rpcrt4/tests/server.idl |    1 +
  2 files changed, 47 insertions(+), 0 deletions(-)






diff --git a/dlls/rpcrt4/tests/server.c b/dlls/rpcrt4/tests/server.c
index eb8f061..9eaf7cc 100644
--- a/dlls/rpcrt4/tests/server.c
+++ b/dlls/rpcrt4/tests/server.c
@@ -36,6 +36,8 @@
 
 static const char *progname;
 static BOOL old_windows_version;
+/* To know if the IDL file was parsed with or without widl -Oif or midl /Oif */
+static BOOL old_midl_flags;
 
 static HANDLE stop_event;
 
@@ -604,6 +606,10 @@ int __cdecl s_echo_ranged_int(int n)
     return n;
 }
 
+void __cdecl s_some_ranged_func(int n)
+{
+}
+
 void __cdecl s_get_ranged_enum(renum_t *re)
 {
     *re = RE3;
@@ -811,6 +817,7 @@ basic_tests(void)
   str_t str;
   se_t se;
   renum_t re;
+  unsigned long exception;
 
   ok(int_return() == INT_CODE, "RPC int_return\n");
 
@@ -939,6 +946,42 @@ basic_tests(void)
   x = echo_ranged_int(100);
   ok(x == 100, "echo_ranged_int() returned %d instead of 100\n", x);
 
+/* Crashes on wine
+  exception = 0; 
+  RpcTryExcept
+  {
+      x = echo_ranged_int(150);
+  }
+  RpcExcept(TRUE)
+  {
+    exception = RpcExceptionCode();
+  }
+  RpcEndExcept
+  if(old_midl_flags)
+  {
+    ok(x == 150, "echo_ranged_int() returned %d instead of 0\n", x);
+    ok(exception == 0, "echo_ranged_int() threw an exception : %lu\n", 
exception);
+  }
+  else
+  {
+    ok(x == 100, "echo_ranged_int() returned %d instead of throwing 
exception\n", x);
+    ok(exception == RPC_X_BAD_STUB_DATA, "Wrong exception : %lu\n", exception);
+  }
+  
+  exception = 0;
+  RpcTryExcept
+  {
+      x = echo_ranged_int(75);
+  }
+  RpcExcept(TRUE)
+  {
+    exception = RpcExceptionCode();
+  }
+  RpcEndExcept
+  ok(x == 75, "echo_ranged_int() returned %d instead of 0\n", x);
+  ok(exception == 0, "echo_ranged_int() threw an exception : %lu\n", 
exception);
+*/
+
   if (!old_windows_version)
   {
       get_ranged_enum(&re);
@@ -1626,6 +1669,9 @@ START_TEST(server)
 
   InitFunctionPointers();
 
+  /* Detect -Oif flags */
+  old_midl_flags = ((RPC_SERVER_INTERFACE*)s_IServer_v0_0_s_ifspec)->Flags == 
0;
+
   if (pGetUserNameExA)
   {
     ULONG size = 0;
diff --git a/dlls/rpcrt4/tests/server.idl b/dlls/rpcrt4/tests/server.idl
index c7c7237..39d6940 100644
--- a/dlls/rpcrt4/tests/server.idl
+++ b/dlls/rpcrt4/tests/server.idl
@@ -364,6 +364,7 @@ cpp_quote("#endif")
   typedef [range(RE_MIN, RE_MAX)] enum renum renum_t;
   typedef [range(0, 100)] int rint_t;
   rint_t echo_ranged_int([range(0, 100)] int n);
+  void some_ranged_func([in, range(0,50)] int n);
   void get_ranged_enum([out] renum_t *re);
 
   void context_handle_test(void);




Reply via email to