Make typelib marshaller safe for systems that don't allow executable
code on the heap, plug a leak of the assembly stub block.

diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c
index f20fa5e..fb584f1 100644
--- a/dlls/oleaut32/tmarshal.c
+++ b/dlls/oleaut32/tmarshal.c
@@ -340,6 +340,7 @@
     This->ref--;
     if (This->ref) return This->ref;
     if (This->chanbuf) IRpcChannelBuffer_Release(This->chanbuf);
+    VirtualFree(This->asmstubs, 0, MEM_RELEASE);
     HeapFree(GetProcessHeap(),0,This);
     return 0;
 }
@@ -1362,12 +1363,18 @@
 	return hres;
     }
     nroffuncs = _nroffuncs(tinfo);
-    proxy = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(TMProxyImpl));
+    proxy = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(TMProxyImpl));
     if (!proxy) return E_OUTOFMEMORY;
-    proxy->asmstubs=HeapAlloc(GetProcessHeap(),0,sizeof(TMAsmProxy)*nroffuncs);
 
     assert(sizeof(TMAsmProxy) == 12);
 
+    proxy->asmstubs = VirtualAlloc(NULL, sizeof(TMAsmProxy) * nroffuncs, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
+    if (!proxy->asmstubs) {
+        ERR("Could not commit pages for proxy thunks\n");
+        HeapFree(GetProcessHeap(), 0, proxy);
+        return E_OUTOFMEMORY;
+    }
+
     proxy->lpvtbl = HeapAlloc(GetProcessHeap(),0,sizeof(LPBYTE)*nroffuncs);
     for (i=0;i<nroffuncs;i++) {
 	int		nrofargs;