Update: Removing my list of full trust assemblies from
AppDomain.CreateDomain() allows the code to run just fine with the
restricted permission set. I'm not sure why, starting to think its an
issue or bug in .NET itself, unless I'm just not understanding full
trust assemblies right.
- Jason
On 9/8/2013 5:19 PM, Jason A. Petrasko wrote:
I had my code setup to call ExecuteAndWrap on the ScriptSource, which
worked ok, but if there were errors in the compilation stage I lost
them because of the cross domain exceptions bungling. So I changed my
code like so:
Source = Engine.CreateScriptSourceFromString (code,
Microsoft.Scripting.SourceCodeKind.File);
Reporter.Reset();
CompiledCode cc = Source.Compile (Reporter);
if (cc != null)
{
ObjectHandle ohe;
cc.ExecuteAndWrap (Scope, out ohe);
if (ohe != null) {
object o = ohe.Unwrap ();
if (o is Exception)
return ((Exception)o).ToString ();
}
return null;
} else
return Reporter.AllErrors();
However when I try to access my scope variable objects I get this
exception:
----
System.Security.SecurityException: Request failed.
at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(RuntimeAssembly
asm, PermissionSet granted, PermissionSet refused,
RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand,
IPermission permThatFailed)
at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Object
assemblyOrString, PermissionSet granted, PermissionSet refused,
RuntimeMethodHandleInternal rmh, SecurityAction action, Object demand,
IPermission permThatFailed)
at
System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet
grants, PermissionSet refused, PermissionSet demands,
RuntimeMethodHandleInternal rmh, Object assemblyOrString,
SecurityAction action, Boolean throwException)
at
System.Security.CodeAccessSecurityEngine.CheckSetHelper(CompressedStack cs,
PermissionSet grants, PermissionSet refused, PermissionSet demands,
RuntimeMethodHandleInternal rmh, RuntimeAssembly asm, SecurityAction
action)
at
System.Runtime.CompilerServices.RuntimeHelpers._CompileMethod(IRuntimeMethodInfo
method)
at System.Reflection.Emit.DynamicMethod.CreateDelegate(Type
delegateType, Object target)
at System.Linq.Expressions.Compiler.LambdaCompiler.CreateDelegate()
ct state)
at
Microsoft.Scripting.Interpreter.LightDelegateCreator.CreateDelegate(StrongBox`1[]
closure)
at
Microsoft.Scripting.Interpreter.LightDelegateCreator.CreateDelegate()
at Microsoft.Scripting.Generation.CompilerHelpers.LightCompile(Lamb
at
System.Linq.Expressions.Compiler.LambdaCompiler.Compile(LambdaExpression
lambda, DebugInfoGenerator debugInfoGenerator)
at System.Linq.Expressions.LambdaExpression.Compile()
at
Microsoft.Scripting.Interpreter.LightDelegateCreator.Compile(ObjeDynamicMetaObject
binding, CachedBindingInfo`1 bindingInfo)
at
Microsoft.Scripting.Utils.DynamicUtils.GenericInterpretedBinder`1.Bind(DynamicMetaObjectBinder
binder, Int32 compilationThreshold, Object[] args)
at Microsoft.Scripting.Utils.DynamicUtidaExpression lambda, Int32
compilationThreshold)
at
Microsoft.Scripting.Generation.CompilerHelpers.LightCompile[T](Expression`1
lambda, Int32 compilationThreshold)
at
Microsoft.Scripting.Utils.DynamicUtils.GenericInterpretedBinder`1.CreateDelegate(ls.LightBind[T](DynamicMetaObjectBinder
binder, Object[] args, Int32 compilationThreshold)
at
IronPython.Runtime.Types.BuiltinFunction.IronPython.Runtime.Binding.IFastInvokable.MakeInvokeBinding[T](CallSite`1
site, PythonInvokeBinder binder, CodeContext state, Object[] args)
at
IronPython.Runtime.Binding.PythonInvokeBinder.BindDelegate[T](CallSite`1
site, Object[] args)
at
System.Runtime.CompilerServices.CallSiteBinder.BindCore[T](CallSite`1
site, Object[] args)
at
System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite
site, T0 arg0, T1 arg1, T2 arg2)
at
Microsoft.Scripting.Interpreter.DynamicInstruction`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.Hosting.CompiledCode.Execute(ScriptScope scope)
at
Microsoft.Scripting.Hosting.CompiledCode.ExecuteAndWrap(ScriptScope
scope, ObjectHandle& exception)
The action that failed was:
Demand
The type of the first permission that failed was:
System.Security.PermissionSet
The demand was for:
<PermissionSet class="System.Security.PermissionSet"
version="1"
Unrestricted="true"/>
The granted set of the failing assembly was:
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.ReflectionPermission,
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=<snip>"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=<snip>"
version="1"
Flags="Execution"/>
</PermissionSet>
The assembly or AppDomain that failed was:
mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=<snip>
----
Which I didn't get when I called ExecuteAndWrap() from the
ScriptSource... I have no idea what is going on, and no internet
searches are helping me debug this :(
I setup the AppDomain for the engine like so:
pset.AddPermission (new SecurityPermission
(SecurityPermissionFlag.Execution));
pset.AddPermission(new
ReflectionPermission(PermissionState.Unrestricted));
pset.AddPermission(new
FileIOPermission(FileIOPermissionAccess.PathDiscovery |
FileIOPermissionAccess.Read | FileIOPermissionAccess.Write,
AppDomain.CurrentDomain.BaseDirectory));
Any ideas?
- Jason Petrasko
_______________________________________________
Ironpython-users mailing list
Ironpython-users@python.org
https://mail.python.org/mailman/listinfo/ironpython-users
_______________________________________________
Ironpython-users mailing list
Ironpython-users@python.org
https://mail.python.org/mailman/listinfo/ironpython-users