[Ironpython-users] Importing modules in a restricted AppDomain

Dino Viehland dinov at microsoft.com
Wed Mar 7 21:30:56 CET 2012


Ok, that looks like it's a bug.  We're using GC handles to implement weakref.ref and that is raising the exception on the desktop CLR.  In Silverlight we don't use GCHandle's but we also don't get as good of a match w/ CPython's finalization semantics.

I'm not quite sure where the usage of weakref.ref is coming from but it's probably decimal.py imports the copy module and that's probably what breaks it.  But it looks like decimal isn't using copy (at least in my normal 2.7 std lib) so in theory you could just remove that import from the std lib module and things might work for you from there (until someone else implements copy).

To fix Ipy we probably want Microsoft.Dynamic's WeakHandle class to handle the SecurityException and fallback to its Silverlight version of the code (or simply use the Silverlight version and not have quite as good compatibility, or figure out some other way to get that compatibility).

From: ironpython-users-bounces+dinov=exchange.microsoft.com at python.org [mailto:ironpython-users-bounces+dinov=exchange.microsoft.com at python.org] On Behalf Of Cesar Mello
Sent: Wednesday, March 07, 2012 12:12 PM
To: Dino Viehland
Cc: ironpython-users at python.org
Subject: Re: [Ironpython-users] Importing modules in a restricted AppDomain

OK I changed from:

m_engine.Execute("import decimal");

to ExecuteAndWrap, and the objectOperations.Format returns:

<System.Security.SecurityException object at 0x000000000000002B [System.Security.SecurityException: Request failed....]>

Please notice I'm just importing the standard decimal module. Breaking into the first SecurityException I get the stack trace below.

Thanks a lot!

Best regards
Mello

           mscorlib.dll!System.Security.CodeAccessSecurityEngine.ThrowSecurityException(System.Reflection.RuntimeAssembly asm, System.Security.PermissionSet granted, System.Security.PermissionSet refused, System.RuntimeMethodHandleInternal rmh, System.Security.Permissions.SecurityAction action, object demand, System.Security.IPermission permThatFailed) + 0x103 bytes
          mscorlib.dll!System.Security.CodeAccessSecurityEngine.CheckSetHelper(System.Security.PermissionSet grants, System.Security.PermissionSet refused, System.Security.PermissionSet demands, System.RuntimeMethodHandleInternal rmh, object assemblyOrString, System.Security.Permissions.SecurityAction action, bool throwException) + 0x160 bytes
          [Native to Managed Transition]
          [Managed to Native Transition]
          IronPython.dll!IronPython.Runtime.WeakRefTracker.CallbackInfo.CallbackInfo(object callback, object weakRef) + 0x5c bytes
          IronPython.dll!IronPython.Runtime.WeakRefTracker.ChainCallback(object callback, object weakRef) + 0x71 bytes
          IronPython.dll!IronPython.Runtime.WeakRefTracker.WeakRefTracker(object callback, object weakRef) + 0x8d bytes
          IronPython.Modules.dll!IronPython.Modules.PythonWeakRef.WeakRefHelpers.InitializeWeakRef(object self, object target, object callback) + 0xe1 bytes
          IronPython.Modules.dll!IronPython.Modules.PythonWeakRef.ref.ref(object object, object callback) + 0x46 bytes
          IronPython.Modules.dll!IronPython.Modules.PythonWeakRef.ref.ref(object object) + 0x35 bytes
           IronPython.Modules.dll!IronPython.Modules.PythonWeakRef.ref.__new__(IronPython.Runtime.CodeContext context, IronPython.Runtime.Types.PythonType cls, object object) + 0x1df bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,IronPython.Runtime.Types.PythonType,object,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x23a bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run4<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, object arg3) + 0x1e4 bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute3<IronPython.Runtime.CodeContext,object,object,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, object arg1, object arg2) + 0x63a bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<System.Func<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object,object>,System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x3b3 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run4<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, object arg3) + 0x1e4 bytes
           IronPython.dll!IronPython.Compiler.Ast.CallExpression.Invoke1Instruction.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x10f bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run3<IronPython.Runtime.PythonFunction,object,object,object>(IronPython.Runtime.PythonFunction arg0, object arg1, object arg2) + 0x1b7 bytes
           IronPython.dll!IronPython.Compiler.PythonCallTargets.OriginalCallTarget2(IronPython.Runtime.PythonFunction function, object arg0, object arg1) + 0xa8 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<System.Func<IronPython.Runtime.PythonFunction,object,object,object>,IronPython.Runtime.PythonFunction,object,object,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x2fb bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run4<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,IronPython.Runtime.PythonFunction,object,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, IronPython.Runtime.PythonFunction arg2, object arg3) + 0x1e4 bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute3<IronPython.Runtime.CodeContext,IronPython.Runtime.PythonFunction,object,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, IronPython.Runtime.PythonFunction arg1, object arg2) + 0x63a bytes
           IronPython.dll!IronPython.Runtime.Types.LateBoundInitBinder.FastInitSite.CallTarget(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext context, object inst) + 0x102 bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute2<IronPython.Runtime.CodeContext,object,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, object arg1) + 0x5f3 bytes
           IronPython.dll!IronPython.Runtime.Types.PythonType.FastTypeSite.CallTarget(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext context, object type) + 0x10f bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute2<IronPython.Runtime.CodeContext,object,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, object arg1) + 0x5f3 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<System.Func<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object>,System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x2fb bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run3<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2) + 0x1b7 bytes
           IronPython.dll!IronPython.Compiler.Ast.CallExpression.Invoke0Instruction.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xbd bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run5<IronPython.Runtime.PythonFunction,object,object,object,object,object>(IronPython.Runtime.PythonFunction arg0, object arg1, object arg2, object arg3, object arg4) + 0x21a bytes
           IronPython.dll!IronPython.Compiler.PythonCallTargets.OriginalCallTarget4(IronPython.Runtime.PythonFunction function, object arg0, object arg1, object arg2, object arg3) + 0xc4 bytes
           IronPython.dll!IronPython.Runtime.PythonFunction.FunctionCaller<object,string,IronPython.Runtime.PythonTuple,IronPython.Runtime.PythonDictionary>.Call4(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext context, object func, object arg0, string arg1, IronPython.Runtime.PythonTuple arg2, IronPython.Runtime.PythonDictionary arg3) + 0x11f bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute6<IronPython.Runtime.CodeContext,object,object,string,IronPython.Runtime.PythonTuple,IronPython.Runtime.PythonDictionary,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, object arg1, object arg2, string arg3, IronPython.Runtime.PythonTuple arg4, IronPython.Runtime.PythonDictionary arg5) + 0x70f bytes
           IronPython.dll!IronPython.Runtime.Types.PythonType.NewSite<string,IronPython.Runtime.PythonTuple,IronPython.Runtime.PythonDictionary>.Call(IronPython.Runtime.CodeContext context, object typeOrInstance, string arg0, IronPython.Runtime.PythonTuple arg1, IronPython.Runtime.PythonDictionary arg2) + 0x95 bytes
           IronPython.dll!IronPython.Runtime.Types.PythonType.FastTypeSite<string,IronPython.Runtime.PythonTuple,IronPython.Runtime.PythonDictionary>.CallTarget(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext context, object type, string arg0, IronPython.Runtime.PythonTuple arg1, IronPython.Runtime.PythonDictionary arg2) + 0xf3 bytes
           System.Core.dll!System.Dynamic.UpdateDelegates.UpdateAndExecute5<IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonTuple,IronPython.Runtime.PythonDictionary,object>(System.Runtime.CompilerServices.CallSite site, IronPython.Runtime.CodeContext arg0, object arg1, string arg2, IronPython.Runtime.PythonTuple arg3, IronPython.Runtime.PythonDictionary arg4) + 0x6c8 bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.MakeClass(IronPython.Runtime.CodeContext context, string name, object[] bases, string selfNames, IronPython.Runtime.PythonDictionary vars) + 0x5ac bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.MakeClass(IronPython.Runtime.FunctionCode funcCode, System.Func<IronPython.Runtime.CodeContext,IronPython.Runtime.CodeContext> body, IronPython.Runtime.CodeContext parentContext, string name, object[] bases, string selfNames) + 0xf1 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.FunctionCode,System.Func<IronPython.Runtime.CodeContext,IronPython.Runtime.CodeContext>,IronPython.Runtime.CodeContext,string,object[],string,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x483 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run1<IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.FunctionCode arg0) + 0x15e bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x1c8 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.InitializeModule(string fileName, IronPython.Runtime.ModuleContext moduleContext, Microsoft.Scripting.ScriptCode scriptCode, IronPython.Runtime.ModuleOptions options) + 0x288 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options, out Microsoft.Scripting.ScriptCode scriptCode) + 0x1b6 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options) + 0x61 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromSourceUnit(IronPython.Runtime.CodeContext context, Microsoft.Scripting.SourceUnit sourceCode, string name, string path) + 0x65 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadModuleFromSource(IronPython.Runtime.CodeContext context, string name, string path) + 0x1b0 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromDisk(IronPython.Runtime.CodeContext context, string name, string fullName, string str) + 0x13e bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPathHook(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path, System.Func<IronPython.Runtime.CodeContext,string,string,string,object> defaultLoader) + 0x29a bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPath(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path) + 0xc4 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportTopAbsolute(IronPython.Runtime.CodeContext context, string name) + 0x1ff bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportModule(IronPython.Runtime.CodeContext context, object globals, string modName, bool bottom, int level) + 0x962 bytes
          IronPython.dll!IronPython.Modules.Builtin.__import__(IronPython.Runtime.CodeContext context, string name, object globals, object locals, object fromlist, int level) + 0x1a5 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,object,object,object,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x45c bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run7<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonTuple,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, string arg3, IronPython.Runtime.PythonDictionary arg4, IronPython.Runtime.PythonDictionary arg5, IronPython.Runtime.PythonTuple arg6) + 0x280 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportLightThrow(IronPython.Runtime.CodeContext context, string fullName, IronPython.Runtime.PythonTuple from, int level) + 0x178 bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.ImportTop(IronPython.Runtime.CodeContext context, string fullName, int level) + 0x3f bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x212 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run1<IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.FunctionCode arg0) + 0x15e bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x1c8 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.InitializeModule(string fileName, IronPython.Runtime.ModuleContext moduleContext, Microsoft.Scripting.ScriptCode scriptCode, IronPython.Runtime.ModuleOptions options) + 0x288 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options, out Microsoft.Scripting.ScriptCode scriptCode) + 0x1b6 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options) + 0x61 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromSourceUnit(IronPython.Runtime.CodeContext context, Microsoft.Scripting.SourceUnit sourceCode, string name, string path) + 0x65 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadModuleFromSource(IronPython.Runtime.CodeContext context, string name, string path) + 0x1b0 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromDisk(IronPython.Runtime.CodeContext context, string name, string fullName, string str) + 0x13e bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPathHook(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path, System.Func<IronPython.Runtime.CodeContext,string,string,string,object> defaultLoader) + 0x29a bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPath(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path) + 0xc4 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportTopAbsolute(IronPython.Runtime.CodeContext context, string name) + 0x1ff bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportModule(IronPython.Runtime.CodeContext context, object globals, string modName, bool bottom, int level) + 0x962 bytes
          IronPython.dll!IronPython.Modules.Builtin.__import__(IronPython.Runtime.CodeContext context, string name, object globals, object locals, object fromlist, int level) + 0x1a5 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,object,object,object,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x45c bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run7<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonTuple,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, string arg3, IronPython.Runtime.PythonDictionary arg4, IronPython.Runtime.PythonDictionary arg5, IronPython.Runtime.PythonTuple arg6) + 0x280 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportLightThrow(IronPython.Runtime.CodeContext context, string fullName, IronPython.Runtime.PythonTuple from, int level) + 0x178 bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.ImportTop(IronPython.Runtime.CodeContext context, string fullName, int level) + 0x3f bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x212 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run1<IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.FunctionCode arg0) + 0x15e bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x1c8 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.InitializeModule(string fileName, IronPython.Runtime.ModuleContext moduleContext, Microsoft.Scripting.ScriptCode scriptCode, IronPython.Runtime.ModuleOptions options) + 0x288 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options, out Microsoft.Scripting.ScriptCode scriptCode) + 0x1b6 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options) + 0x61 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromSourceUnit(IronPython.Runtime.CodeContext context, Microsoft.Scripting.SourceUnit sourceCode, string name, string path) + 0x65 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadModuleFromSource(IronPython.Runtime.CodeContext context, string name, string path) + 0x1b0 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromDisk(IronPython.Runtime.CodeContext context, string name, string fullName, string str) + 0x13e bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPathHook(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path, System.Func<IronPython.Runtime.CodeContext,string,string,string,object> defaultLoader) + 0x29a bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPath(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path) + 0xc4 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportTopAbsolute(IronPython.Runtime.CodeContext context, string name) + 0x1ff bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportModule(IronPython.Runtime.CodeContext context, object globals, string modName, bool bottom, int level) + 0x962 bytes
          IronPython.dll!IronPython.Modules.Builtin.__import__(IronPython.Runtime.CodeContext context, string name, object globals, object locals, object fromlist, int level) + 0x1a5 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,object,object,object,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x45c bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run7<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonTuple,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, string arg3, IronPython.Runtime.PythonDictionary arg4, IronPython.Runtime.PythonDictionary arg5, IronPython.Runtime.PythonTuple arg6) + 0x280 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportLightThrow(IronPython.Runtime.CodeContext context, string fullName, IronPython.Runtime.PythonTuple from, int level) + 0x178 bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.ImportTop(IronPython.Runtime.CodeContext context, string fullName, int level) + 0x3f bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x212 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run1<IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.FunctionCode arg0) + 0x15e bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x1c8 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.InitializeModule(string fileName, IronPython.Runtime.ModuleContext moduleContext, Microsoft.Scripting.ScriptCode scriptCode, IronPython.Runtime.ModuleOptions options) + 0x288 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options, out Microsoft.Scripting.ScriptCode scriptCode) + 0x1b6 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options) + 0x61 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromSourceUnit(IronPython.Runtime.CodeContext context, Microsoft.Scripting.SourceUnit sourceCode, string name, string path) + 0x65 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadModuleFromSource(IronPython.Runtime.CodeContext context, string name, string path) + 0x1b0 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromDisk(IronPython.Runtime.CodeContext context, string name, string fullName, string str) + 0x13e bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPathHook(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path, System.Func<IronPython.Runtime.CodeContext,string,string,string,object> defaultLoader) + 0x29a bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPath(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path) + 0xc4 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportTopAbsolute(IronPython.Runtime.CodeContext context, string name) + 0x1ff bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportModule(IronPython.Runtime.CodeContext context, object globals, string modName, bool bottom, int level) + 0x962 bytes
          IronPython.dll!IronPython.Modules.Builtin.__import__(IronPython.Runtime.CodeContext context, string name, object globals, object locals, object fromlist, int level) + 0x1a5 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,object,object,object,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x45c bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run7<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonTuple,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, string arg3, IronPython.Runtime.PythonDictionary arg4, IronPython.Runtime.PythonDictionary arg5, IronPython.Runtime.PythonTuple arg6) + 0x280 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportLightThrow(IronPython.Runtime.CodeContext context, string fullName, IronPython.Runtime.PythonTuple from, int level) + 0x178 bytes
           IronPython.dll!IronPython.Runtime.Operations.PythonOps.ImportBottom(IronPython.Runtime.CodeContext context, string fullName, int level) + 0x64 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x212 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run1<IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.FunctionCode arg0) + 0x15e bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x1c8 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.InitializeModule(string fileName, IronPython.Runtime.ModuleContext moduleContext, Microsoft.Scripting.ScriptCode scriptCode, IronPython.Runtime.ModuleOptions options) + 0x288 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options, out Microsoft.Scripting.ScriptCode scriptCode) + 0x1b6 bytes
          IronPython.dll!IronPython.Runtime.PythonContext.CompileModule(string fileName, string moduleName, Microsoft.Scripting.SourceUnit sourceCode, IronPython.Runtime.ModuleOptions options) + 0x61 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromSourceUnit(IronPython.Runtime.CodeContext context, Microsoft.Scripting.SourceUnit sourceCode, string name, string path) + 0x65 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadModuleFromSource(IronPython.Runtime.CodeContext context, string name, string path) + 0x1b0 bytes
          IronPython.dll!IronPython.Runtime.Importer.LoadFromDisk(IronPython.Runtime.CodeContext context, string name, string fullName, string str) + 0x13e bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPathHook(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path, System.Func<IronPython.Runtime.CodeContext,string,string,string,object> defaultLoader) + 0x29a bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportFromPath(IronPython.Runtime.CodeContext context, string name, string fullName, IronPython.Runtime.List path) + 0xc4 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportTopAbsolute(IronPython.Runtime.CodeContext context, string name) + 0x1ff bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportModule(IronPython.Runtime.CodeContext context, object globals, string modName, bool bottom, int level) + 0x962 bytes
          IronPython.dll!IronPython.Modules.Builtin.__import__(IronPython.Runtime.CodeContext context, string name, object globals, object locals, object fromlist, int level) + 0x1a5 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,object,object,object,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x45c bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run7<System.Runtime.CompilerServices.CallSite,IronPython.Runtime.CodeContext,object,string,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonDictionary,IronPython.Runtime.PythonTuple,object>(System.Runtime.CompilerServices.CallSite arg0, IronPython.Runtime.CodeContext arg1, object arg2, string arg3, IronPython.Runtime.PythonDictionary arg4, IronPython.Runtime.PythonDictionary arg5, IronPython.Runtime.PythonTuple arg6) + 0x280 bytes
          IronPython.dll!IronPython.Runtime.Importer.ImportLightThrow(IronPython.Runtime.CodeContext context, string fullName, IronPython.Runtime.PythonTuple from, int level) + 0x178 bytes
          IronPython.dll!IronPython.Runtime.Operations.PythonOps.ImportTop(IronPython.Runtime.CodeContext context, string fullName, int level) + 0x3f bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.FuncCallInstruction<IronPython.Runtime.CodeContext,string,int,object>.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0x212 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.Interpreter.Run(Microsoft.Scripting.Interpreter.InterpretedFrame frame) + 0xf0 bytes
           Microsoft.Dynamic.dll!Microsoft.Scripting.Interpreter.LightLambda.Run2<IronPython.Runtime.CodeContext,IronPython.Runtime.FunctionCode,object>(IronPython.Runtime.CodeContext arg0, IronPython.Runtime.FunctionCode arg1) + 0x18f bytes
          IronPython.dll!IronPython.Compiler.PythonScriptCode.RunWorker(IronPython.Runtime.CodeContext ctx) + 0x9e bytes
          IronPython.dll!IronPython.Compiler.PythonScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0xb9 bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Microsoft.Scripting.Runtime.Scope scope) + 0x33f bytes
          IronPython.dll!IronPython.Compiler.RuntimeScriptCode.Run(Microsoft.Scripting.Runtime.Scope scope) + 0x32 bytes
          Microsoft.Scripting.dll!Microsoft.Scripting.SourceUnit.Execute(Microsoft.Scripting.Runtime.Scope scope, Microsoft.Scripting.ErrorSink errorSink) + 0xf4 bytes
          Microsoft.Scripting.dll!Microsoft.Scripting.SourceUnit.Execute(Microsoft.Scripting.Runtime.Scope scope) + 0x3f bytes
           Microsoft.Scripting.dll!Microsoft.Scripting.Hosting.ScriptSource.Execute(Microsoft.Scripting.Hosting.ScriptScope scope) + 0x76 bytes
          Microsoft.Scripting.dll!Microsoft.Scripting.Hosting.ScriptEngine.Execute(string expression, Microsoft.Scripting.Hosting.ScriptScope scope) + 0x53 bytes
          Microsoft.Scripting.dll!Microsoft.Scripting.Hosting.ScriptEngine.ExecuteAndWrap(string expression, Microsoft.Scripting.Hosting.ScriptScope scope, out System.Runtime.Remoting.ObjectHandle exception) + 0x64 bytes
          [Native to Managed Transition]
          [Managed to Native Transition]
           mscorlib.dll!System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage msg, int methodPtr, bool fExecuteInContext) + 0x429 bytes
           mscorlib.dll!System.Runtime.Remoting.Messaging.ServerObjectTerminatorSink.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage reqMsg) + 0x107 bytes
           mscorlib.dll!System.Runtime.Remoting.Messaging.ServerContextTerminatorSink.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage reqMsg) + 0x16c bytes
           mscorlib.dll!System.Runtime.Remoting.Channels.CrossContextChannel.SyncProcessMessageCallback(object[] args) + 0x1ba bytes
          [Native to Managed Transition]
          [Managed to Native Transition]
           mscorlib.dll!System.Runtime.Remoting.Channels.CrossContextChannel.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage reqMsg) + 0x113 bytes
           mscorlib.dll!System.Runtime.Remoting.Channels.ChannelServices.SyncDispatchMessage(System.Runtime.Remoting.Messaging.IMessage msg) + 0x167 bytes
          mscorlib.dll!System.Runtime.Remoting.Channels.CrossAppDomainSink.DoDispatch(byte[] reqStmBuff, System.Runtime.Remoting.Messaging.SmuggledMethodCallMessage smuggledMcm, out System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage smuggledMrm) + 0xc8 bytes
           mscorlib.dll!System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatchCallback(object[] args) + 0x92 bytes
          [Appdomain Transition]
          mscorlib.dll!System.Runtime.Remoting.Channels.CrossAppDomainSink.DoTransitionDispatch(byte[] reqStmBuff, System.Runtime.Remoting.Messaging.SmuggledMethodCallMessage smuggledMcm, out System.Runtime.Remoting.Messaging.SmuggledMethodReturnMessage smuggledMrm) + 0xa0 bytes
           mscorlib.dll!System.Runtime.Remoting.Channels.CrossAppDomainSink.SyncProcessMessage(System.Runtime.Remoting.Messaging.IMessage reqMsg) + 0x13b bytes
           mscorlib.dll!System.Runtime.Remoting.Proxies.RemotingProxy.CallProcessMessage(System.Runtime.Remoting.Messaging.IMessageSink ms, System.Runtime.Remoting.Messaging.IMessage reqMsg, System.Runtime.Remoting.Contexts.ArrayWithSize proxySinks, System.Threading.Thread currentThread, System.Runtime.Remoting.Contexts.Context currentContext, bool bSkippingContextChain) + 0x9e bytes
           mscorlib.dll!System.Runtime.Remoting.Proxies.RemotingProxy.InternalInvoke(System.Runtime.Remoting.Messaging.IMethodCallMessage reqMcmMsg, bool useDispatchMessage, int callType) + 0x525 bytes
          mscorlib.dll!System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(ref System.Runtime.Remoting.Proxies.MessageData msgData, int type) + 0x5fa bytes
>          Elipse.Epm.Scripting.dll!Elipse.Epm.Scripting.ExpressionEvaluator.ImportStandardModules(Microsoft.Scripting.Hosting.ScriptScope scope) Line 181 + 0x3d bytes           C#







On Wed, Mar 7, 2012 at 4:47 PM, Dino Viehland <dinov at microsoft.com<mailto:dinov at microsoft.com>> wrote:
After adding the reflection permissions I wonder what the exception is.  Instead of doing Engine.Execute(string, ScriptScope) can you instead call ExecuteAndWrap(string, ScriptScope, out ObjectHandle)?  In general when you're working with the remote domain you'll want to use the *Wrap versions to avoid serializing results back into the local domain (which can fail).

I'm not sure if we're trying to serialize an exception object here or the result of your execution, but either way one of those is failing.  You should be able to check and see if the handles are null, and can also pass them back into the remote domain for formatting (using either ObjectOperations.Format or ExceptionOperations.FormatException) and just get a string back.

From: Cesar Mello [mailto:cmello at gmail.com<mailto:cmello at gmail.com>]
Sent: Wednesday, March 07, 2012 11:38 AM
To: Dino Viehland
Cc: ironpython-users at python.org<mailto:ironpython-users at python.org>

Subject: Re: [Ironpython-users] Importing modules in a restricted AppDomain

Thanks a lot for the help guys. I'm trying to walk on my own, but just for a quick feedback I've used the code suggested and now when I run "import decimal" I get a MethodAccessException. I presumed it was safe to add all the Reflection permissions and then I get an unhandled ArgumentNullException (second stack trace). There is a bunch of internal SecurityExceptions that are handled in the meantime though. I'll try to debug this using the Console in a restricted AppDomain, so please don't bother to answer me if I am doing some silly mistake.

Thanks and best regards!
Mello

Stack trace 1 (MethodAccessException)

Attempt by method 'Microsoft.Scripting.Utils.ReflectionUtils.CreateDelegate(System.Reflection.MethodInfo, System.Type, System.Object)' to access method 'IronPython.Compiler.Ast.UncollectableCompilationMode.NextSite<System.Func`4<System.Runtime.CompilerServices.CallSite,System.Object,IronPython.Runtime.CodeContext,System.Object>>(System.Dynamic.DynamicMetaObjectBinder)' failed.

   at System.Delegate.BindToMethodInfo(Object target, IRuntimeMethodInfo method, RuntimeType methodType, DelegateBindingFlags flags)
   at System.Delegate.CreateDelegate(Type type, Object firstArgument, MethodInfo method, Boolean throwOnBindFailure)
   at Microsoft.Scripting.Utils.ReflectionUtils.CreateDelegate(MethodInfo methodInfo, Type delegateType, Object target)
   at Microsoft.Scripting.Utils.ReflectionUtils.CreateDelegate(MethodInfo methodInfo, Type delegateType)
   at IronPython.Compiler.Ast.UncollectableCompilationMode.DelegateCache.MakeDelegateType(Type retType, Expression[] args)
   at IronPython.Compiler.Ast.UncollectableCompilationMode.ReduceDynamic(DynamicMetaObjectBinder binder, Type retType, Expression arg0, Expression arg1)
   at IronPython.Compiler.Ast.DynamicGetMemberExpression.Reduce()
   at System.Linq.Expressions.Expression.ReduceAndCheck()
   at System.Linq.Expressions.Expression.VisitChildren(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitExtension(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.VisitExtension(Expression node)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.Expression.VisitChildren(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitExtension(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.VisitExtension(Expression node)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node)
   at System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node)
   at System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.Expression.VisitChildren(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitExtension(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.VisitExtension(Expression node)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node)
   at System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.Expression.VisitChildren(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.VisitExtension(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.VisitExtension(Expression node)
   at System.Linq.Expressions.Expression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at System.Linq.Expressions.ExpressionVisitor.VisitBlock(BlockExpression node)
   at System.Linq.Expressions.BlockExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.RewriteTryBody(TryExpression node, LabelTarget ehLabel)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.RewriteTryCatch(TryExpression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.VisitTry(TryExpression node)
   at System.Linq.Expressions.TryExpression.Accept(ExpressionVisitor visitor)
   at System.Linq.Expressions.ExpressionVisitor.Visit(Expression node)
   at Microsoft.Scripting.Ast.LightExceptionRewriter.Rewrite(Expression expr)
   at Microsoft.Scripting.Ast.LightExceptionConvertingExpression.Reduce()
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileExtensionExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileMethodCallExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileExtensionExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockStart(BlockExpression node)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockStart(BlockExpression node)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileExtensionExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockStart(BlockExpression node)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileExtensionExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileTryExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileTryExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileAsVoid(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockStart(BlockExpression node)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileBlockExpression(Expression expr, Boolean asVoid)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileLabelExpression(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileNoLabelPush(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.Compile(Expression expr)
   at Microsoft.Scripting.Interpreter.LightCompiler.CompileTop(LightLambdaExpression node)
   at Microsoft.Scripting.Ast.LightExpression`1.Compile(Int32 compilationThreshold)
   at IronPython.Compiler.RuntimeScriptCode.Compile()
   at IronPython.Compiler.RuntimeScriptCode.EnsureCompiled()
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options)
   at IronPython.Runtime.Importer.LoadFromSourceUnit(CodeContext context, SourceUnit sourceCode, String name, String path)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, String name)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at System.Func`7.Invoke(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`7.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run7[T0,T1,T2,T3,T4,T5,T6,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportTop(CodeContext context, String fullName, Int32 level)
   at System.Func`4.Invoke(T1 arg1, T2 arg2, T3 arg3)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
   at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
   at IronPython.Compiler.PythonScriptCode.Run(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope, ErrorSink errorSink)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope)
   at Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
   at Microsoft.Scripting.Hosting.ScriptEngine.Execute(String expression, ScriptScope scope)
   at Microsoft.Scripting.Hosting.ScriptEngine.Execute(String expression, ScriptScope scope)
   at Elipse.Epm.Scripting.ExpressionEvaluator.ImportStandardModules(ScriptScope scope) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 174
   at Elipse.Epm.Scripting.ExpressionEvaluator.AddExpression(Expression expression, Object clientHandle) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 82



--------------------------------------------------
After adding Reflection permissions;

at System.Reflection.RuntimeMethodInfo.MakeGenericMethod(Type[] methodInstantiation)
   at System.Reflection.MemberInfoSerializationHolder.GetRealObject(StreamingContext context)

   at Microsoft.Scripting.Hosting.ScriptEngine.Execute(String expression, ScriptScope scope)
   at Elipse.Epm.Scripting.ExpressionEvaluator.ImportStandardModules(ScriptScope scope) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 174
   at Elipse.Epm.Scripting.ExpressionEvaluator.AddExpression(Expression expression, Object clientHandle) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 82





On Wed, Mar 7, 2012 at 2:34 PM, Dino Viehland <dinov at microsoft.com<mailto:dinov at microsoft.com>> wrote:
Nope, ideally IronPython's assemblies are not trusted.  In general IronPython's assemblies are "security transparent" which means they don't affect any security decisions made by the CLR.  If you gave them full trust then the user could do something like file('C:\\bad_file.txt', 'w+').  The security transparency means that IronPython can contain a bunch of code for accessing files and stuff but that code doesn't need to be audited for security because we don't have any permissions of our own.

You might want to try doing something like:

            AppDomainSetup info = new AppDomainSetup();
            info.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory;
            info.ApplicationName = "Test";

            Evidence evidence = new Evidence();
            evidence.AddHost(new Zone(SecurityZone.Internet));

            System.Security.PermissionSet permSet = SecurityManager.GetStandardSandbox(evidence);
            AppDomain newDomain = AppDomain.CreateDomain("test", evidence, info, permSet, null);

            // create runtime in partial trust...
            ScriptRuntime runtime = Python.CreateRuntime(newDomain);

Which will run the code in the internet zone which should be a safe set of permissions - you might need to add in your path access to this, but we use this setup in a test case so it definitely works.

From: ironpython-users-bounces+dinov=microsoft.com at python.org<mailto:microsoft.com at python.org> [mailto:ironpython-users-bounces+dinov<mailto:ironpython-users-bounces%2Bdinov>=microsoft.com at python.org<mailto:microsoft.com at python.org>] On Behalf Of Cesar Mello
Sent: Wednesday, March 07, 2012 5:17 AM
To: ironpython-users at python.org<mailto:ironpython-users at python.org>
Subject: Re: [Ironpython-users] Importing modules in a restricted AppDomain

Hi,

Must I grant fulltrust permissions to the IronPython assemblies? Sorry for the basic question, but will the scripts still be restricted in this case?

Thank you a lot. This is a bit urgent for me, because it's the last step before I can finish the prototype with IronPython and let it be accepted for embedding in our product.

Best regards!
Mello


On Mon, Mar 5, 2012 at 4:26 PM, Cesar Mello <cmello at gmail.com<mailto:cmello at gmail.com>> wrote:
Please ignore my previous question. Sucessfully added FileIOPermission with PathDiscovery and it worked:

      var pythonLibsPath = ExpressionEvaluator.GetPythonLibsPath();
      permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read, pythonLibsPath));


Now I'm facing some problem with Emit permissions. Added ReflectionPermission(PermissionState.Unrestricted) but still doesn't work.

I'm using .NET 4 in this project at work. Sorry if the subject is too general and off-topic.

Best regards
Mello

Message: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
   at System.Security.CodeAccessPermission.Demand()
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternalNoLock(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModuleInternal(String name, Boolean emitSymbolInfo, StackCrawlMark& stackMark)
   at System.Reflection.Emit.AssemblyBuilder.DefineDynamicModule(String name, Boolean emitSymbolInfo)
   at Microsoft.Scripting.Generation.AssemblyGen..ctor(AssemblyName name, String outDir, String outFileExtension, Boolean isDebuggable, PortableExecutableKinds peKind, ImageFileMachine machine)
   at Microsoft.Scripting.Generation.AssemblyGen..ctor(AssemblyName name, String outDir, String outFileExtension, Boolean isDebuggable)
   at Microsoft.Scripting.Generation.Snippets.CreateNewAssembly(String nameSuffix, Boolean emitSymbols)
   at Microsoft.Scripting.Generation.Snippets.GetOrCreateAssembly(Boolean emitSymbols, AssemblyGen& assembly)
   at Microsoft.Scripting.Generation.Snippets.GetAssembly(Boolean emitSymbols)
   at Microsoft.Scripting.Generation.Snippets.DefineType(String name, Type parent, Boolean preserveName, Boolean emitDebugSymbols)
   at Microsoft.Scripting.Generation.CompilerHelpers.CompileToMethod(LambdaExpression lambda, DebugInfoGenerator debugInfoGenerator, Boolean emitDebugSymbols)
   at Microsoft.Scripting.Generation.CompilerHelpers.CompileToMethod[T](Expression`1 lambda, DebugInfoGenerator debugInfoGenerator, Boolean emitDebugSymbols)
   at Microsoft.Scripting.Generation.CompilerHelpers.Compile[T](Expression`1 lambda, Boolean emitDebugSymbols)
   at IronPython.Compiler.RuntimeScriptCode.Compile()
   at IronPython.Compiler.RuntimeScriptCode.EnsureCompiled()
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at IronPython.Runtime.PythonContext.InitializeModule(String fileName, ModuleContext moduleContext, ScriptCode scriptCode, ModuleOptions options)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options, ScriptCode& scriptCode)
   at IronPython.Runtime.PythonContext.CompileModule(String fileName, String moduleName, SourceUnit sourceCode, ModuleOptions options)
   at IronPython.Runtime.Importer.LoadFromSourceUnit(CodeContext context, SourceUnit sourceCode, String name, String path)
   at IronPython.Runtime.Importer.LoadModuleFromSource(CodeContext context, String name, String path)
   at IronPython.Runtime.Importer.LoadFromDisk(CodeContext context, String name, String fullName, String str)
   at IronPython.Runtime.Importer.ImportFromPathHook(CodeContext context, String name, String fullName, List path, Func`5 defaultLoader)
   at IronPython.Runtime.Importer.ImportFromPath(CodeContext context, String name, String fullName, List path)
   at IronPython.Runtime.Importer.ImportTopAbsolute(CodeContext context, String name)
   at IronPython.Runtime.Importer.ImportModule(CodeContext context, Object globals, String modName, Boolean bottom, Int32 level)
   at IronPython.Modules.Builtin.__import__(CodeContext context, String name, Object globals, Object locals, Object fromlist, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`7.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run7[T0,T1,T2,T3,T4,T5,T6,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6)
   at IronPython.Runtime.Importer.ImportLightThrow(CodeContext context, String fullName, PythonTuple from, Int32 level)
   at IronPython.Runtime.Operations.PythonOps.ImportTop(CodeContext context, String fullName, Int32 level)
   at Microsoft.Scripting.Interpreter.FuncCallInstruction`4.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)
   at Microsoft.Scripting.Interpreter.LightLambda.Run2[T0,T1,TRet](T0 arg0, T1 arg1)
   at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx)
   at IronPython.Compiler.PythonScriptCode.Run(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.InvokeTarget(Scope scope)
   at IronPython.Compiler.RuntimeScriptCode.Run(Scope scope)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope, ErrorSink errorSink)
   at Microsoft.Scripting.SourceUnit.Execute(Scope scope)
   at Microsoft.Scripting.Hosting.ScriptSource.Execute(ScriptScope scope)
   at Microsoft.Scripting.Hosting.ScriptEngine.Execute(String expression, ScriptScope scope)
   at Microsoft.Scripting.Hosting.ScriptEngine.Execute(String expression, ScriptScope scope)
   at Elipse.Epm.Scripting.ExpressionEvaluator.ImportStandardModules(ScriptScope scope) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 174
   at Elipse.Epm.Scripting.ExpressionEvaluator.AddExpression(Expression expression, Object clientHandle) in D:\proj\epm_5527\Source\EpmCommon\Elipse.Epm.Scripting\ExpressionEvaluator.cs:line 82


On Mon, Mar 5, 2012 at 3:18 PM, Cesar Mello <cmello at gmail.com<mailto:cmello at gmail.com>> wrote:
Hi!

Is there a way to load modules without giving permission to the AppDomain to read .py files from disk?

I need to run user code with limited permissions. They should be able to do some simple calculations. But when I try to import a module like 'decimal', filesystem access permission is required.

Thank you a lot for the attention!

Best regards
Mello




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20120307/85cb9b57/attachment-0001.html>


More information about the Ironpython-users mailing list