private static AssemblyGuardSettings CreateGuardSettings(ApiPolicy apiPolicy) { var settings = AssemblyGuardSettings.DefaultForCSharpAssembly(); settings.ApiPolicy = apiPolicy; settings.AllowExplicitLayoutInTypesMatchingPattern = new Regex(settings.AllowExplicitLayoutInTypesMatchingPattern.ToString(), RegexOptions.Compiled); settings.AllowPointerOperationsInTypesMatchingPattern = new Regex(settings.AllowPointerOperationsInTypesMatchingPattern.ToString(), RegexOptions.Compiled); return(settings); }
public AssemblyValidator( AssemblyGuardSettings settings, AssemblyDefinition userAssembly, StackSizeValidator stackSizeValidator, PointerOperationValidator pointerValidator ) { _settings = Argument.NotNull(nameof(settings), settings); _userAssembly = Argument.NotNull(nameof(userAssembly), userAssembly); _stackSizeValidator = Argument.NotNull(nameof(stackSizeValidator), stackSizeValidator); _pointerValidator = Argument.NotNull(nameof(pointerValidator), pointerValidator); }
private static AssemblyGuardSettings CreateGuardSettings(ApiPolicy apiPolicy) { var settings = AssemblyGuardSettings.DefaultForCSharpAssembly(); settings.ApiPolicy = apiPolicy; settings.AllowExplicitLayoutInTypesMatchingPattern = new Regex(settings.AllowExplicitLayoutInTypesMatchingPattern.ToString(), RegexOptions.Compiled); settings.AllowPointerOperationsInTypesMatchingPattern = new Regex(settings.AllowPointerOperationsInTypesMatchingPattern.ToString(), RegexOptions.Compiled); settings.AllowCustomTypesMatchingPatternInSystemNamespaces = new Regex( settings.AllowCustomTypesMatchingPatternInSystemNamespaces.ToString() + @"|System\.Range|System\.Index|System\.Extensions", RegexOptions.Compiled ); return(settings); }
public void Allows_AnonymousTypes() { var compiled = TestHelper.Compile(@" class C { object M() { return new { a = ""x"" }; } } "); // Assert.DoesNotThrow AssemblyGuard.Rewrite(compiled, new MemoryStream(), AssemblyGuardSettings.DefaultForCSharpAssembly()); }
[Fact] // https://github.com/ashmind/SharpLab/issues/323 public void Allows_CallsToRefReadOnlyMethods() { var compiled = TestHelper.Compile(@" class C { static ref readonly int MRef(ref int i) => ref i; static void M() { int x = 0; ref readonly int r = ref MRef(ref x); } } "); // Assert.DoesNotThrow AssemblyGuard.Rewrite(compiled, new MemoryStream(), AssemblyGuardSettings.DefaultForCSharpAssembly()); }
private static AssemblyGuardSettings CreateGuardSettings(ApiPolicy apiPolicy) { var settings = AssemblyGuardSettings.DefaultForCSharpAssembly(); settings.ApiPolicy = apiPolicy; Regex?CompileRegex(Regex?original) => original != null ? new Regex(original.ToString(), original.Options | RegexOptions.Compiled) : null; settings.AllowExplicitLayoutInTypesMatchingPattern = CompileRegex(settings.AllowExplicitLayoutInTypesMatchingPattern); settings.AllowPointerOperationsInTypesMatchingPattern = CompileRegex(settings.AllowPointerOperationsInTypesMatchingPattern); return(settings); }
public Executor( IAssemblyResolver assemblyResolver, ISymbolReaderProvider symbolReaderProvider, ApiPolicy apiPolicy, IReadOnlyCollection <IAssemblyRewriter> rewriters, RecyclableMemoryStreamManager memoryStreamManager, ExecutionResultSerializer serializer, IMonitor monitor ) { _assemblyResolver = assemblyResolver; _symbolReaderProvider = symbolReaderProvider; _guardSettings = CreateGuardSettings(apiPolicy); _rewriters = rewriters; _memoryStreamManager = memoryStreamManager; _serializer = serializer; _monitor = monitor; }
public static Invoke RewriteAndGetMethodWrappedInScope(string code, string typeName, string methodName, AssemblyGuardSettings guardSettings = null) { var assemblySourceStream = Compile(code); var assemblyTargetStream = new MemoryStream(); var token = AssemblyGuard.Rewrite(assemblySourceStream, assemblyTargetStream, guardSettings); return(args => { using (token.Scope(new RuntimeGuardSettings { TimeLimit = TimeSpan.FromMilliseconds(100) })) { var method = GetInstanceMethod(assemblyTargetStream, typeName, methodName); return method(args); } }); }
public PointerOperationValidator(AssemblyGuardSettings settings) { _settings = Argument.NotNull(nameof(settings), settings); }
public StackSizeValidator(AssemblyGuardSettings settings) { _settings = Argument.NotNull(nameof(settings), settings); }