コード例 #1
0
ファイル: Executor.cs プロジェクト: propellingbits/SharpLab
        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);
        }
コード例 #2
0
 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);
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        [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());
        }
コード例 #6
0
ファイル: Executor.cs プロジェクト: zsybupt/SharpLab
        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);
        }
コード例 #7
0
ファイル: Executor.cs プロジェクト: propellingbits/SharpLab
 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;
 }
コード例 #8
0
        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);
                }
            });
        }
コード例 #9
0
 public PointerOperationValidator(AssemblyGuardSettings settings)
 {
     _settings = Argument.NotNull(nameof(settings), settings);
 }
コード例 #10
0
 public StackSizeValidator(AssemblyGuardSettings settings)
 {
     _settings = Argument.NotNull(nameof(settings), settings);
 }