private static void SetupInvocationTracker(InvocationTracker <SyntaxKind> tracker, TrackerInput input) { const int parameterCount = 2; tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.System_Collections_Generic_IDictionary_TKey_TValue, "Add")), tracker.MethodHasParameters(parameterCount), c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) && IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel), tracker.IsIHeadersDictionary()); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Http_HeaderDictionaryExtensions, "Append"), new MemberDescriptor(KnownType.System_Web_HttpResponse, "AppendHeader"), new MemberDescriptor(KnownType.System_Web_HttpResponseBase, "AddHeader"), new MemberDescriptor(KnownType.System_Collections_Specialized_NameValueCollection, "Add"), new MemberDescriptor(KnownType.System_Net_Http_Headers_HttpHeaders, "Add")), tracker.MethodHasParameters(parameterCount), c => IsFirstArgumentAccessControlAllowOrigin((InvocationExpressionSyntax)c.Node, c.SemanticModel) && IsSecondArgumentStarString((InvocationExpressionSyntax)c.Node, c.SemanticModel)); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "WithOrigins")), c => ContainsStar(((InvocationExpressionSyntax)c.Node).ArgumentList.Arguments.Select(a => a.Expression), c.SemanticModel)); tracker.Track(input, tracker.MatchMethod(new MemberDescriptor(KnownType.Microsoft_AspNetCore_Cors_Infrastructure_CorsPolicyBuilder, "AllowAnyOrigin"))); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalQueryableExtensions, "FromSql")), Conditions.And( MethodHasRawSqlQueryParameter(), Conditions.Or( Conditions.Or(ArgumentAtIndexIsConcat(0), ArgumentAtIndexIsFormat(0), ArgumentAtIndexIsInterpolated(0)), Conditions.Or(ArgumentAtIndexIsConcat(1), ArgumentAtIndexIsFormat(1), ArgumentAtIndexIsInterpolated(1)) ) ), Conditions.ExceptWhen( InvocationTracker.ArgumentAtIndexIsConstant(0))); InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalDatabaseFacadeExtensions, "ExecuteSqlCommandAsync"), new MemberDescriptor(KnownType.Microsoft_EntityFrameworkCore_RelationalDatabaseFacadeExtensions, "ExecuteSqlCommand")), Conditions.And( MethodHasRawSqlQueryParameter(), Conditions.Or( Conditions.Or(ArgumentAtIndexIsConcat(0), ArgumentAtIndexIsFormat(0), ArgumentAtIndexIsInterpolated(0)), Conditions.Or(ArgumentAtIndexIsConcat(1), ArgumentAtIndexIsFormat(1), ArgumentAtIndexIsInterpolated(1)) ) ), Conditions.ExceptWhen( InvocationTracker.ArgumentAtIndexIsConstant(0))); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Data_Odbc_OdbcCommand, "CommandText"), new MemberDescriptor(KnownType.System_Data_OracleClient_OracleCommand, "CommandText"), new MemberDescriptor(KnownType.System_Data_SqlClient_SqlCommand, "CommandText"), new MemberDescriptor(KnownType.System_Data_SqlServerCe_SqlCeCommand, "CommandText")), PropertyAccessTracker.MatchSetter(), Conditions.Or(SetterIsConcat(), SetterIsFormat(), SetterIsInterpolation()), Conditions.ExceptWhen( PropertyAccessTracker.AssignedValueIsConstant())); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.Microsoft_EntityFrameworkCore_RawSqlString, KnownType.System_Data_SqlClient_SqlCommand, KnownType.System_Data_SqlClient_SqlDataAdapter, KnownType.System_Data_Odbc_OdbcCommand, KnownType.System_Data_Odbc_OdbcDataAdapter, KnownType.System_Data_SqlServerCe_SqlCeCommand, KnownType.System_Data_SqlServerCe_SqlCeDataAdapter, KnownType.System_Data_OracleClient_OracleCommand, KnownType.System_Data_OracleClient_OracleDataAdapter), ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String), Conditions.Or(FirstArgumentIsConcat(), FirstArgumentIsFormat(), FirstArgumentIsInterpolation()), Conditions.ExceptWhen( ObjectCreationTracker.ArgumentAtIndexIsConst(0))); }
protected override void Initialize(SonarAnalysisContext context) { ObjectCreationTracker.Track(context, ObjectCreationTracker.WhenDerivesFrom(KnownType.System_Security_Cryptography_HashAlgorithm)); InvocationTracker.Track(context, InvocationTracker.MethodNameIs("Create"), InvocationTracker.MethodReturnTypeIs(KnownType.System_Security_Cryptography_HashAlgorithm)); BaseTypeTracker.Track(context, BaseTypeTracker.MatchSubclassesOf(KnownType.System_Security_Cryptography_HashAlgorithm)); }
public void Verify_VerifiableSetupsButNoMatchingInvocations_ThrowsVerificationException() { var setup = new Setup(TestDataFactory.CreateMethodCallInfo(() => Console.WriteLine())); setup.Verifiable(); ConfigureSetups(setup); var subject = new InvocationTracker(_setupManagerMock.Object); subject.Track(ReflectionUtility.GetMethod(() => Console.ReadKey()), new object[0], null); Assert.Throws <VerificationException>(() => subject.Verify()); }
public void Verify_VerifiableSetupsWithMatchingInvocations_DoesntThrow() { var setup = new Setup(TestDataFactory.CreateMethodCallInfo(() => Console.WriteLine())); setup.Verifiable(); ConfigureSetups(setup); var subject = new InvocationTracker(_setupManagerMock.Object); subject.Track(ReflectionUtility.GetMethod(() => Console.WriteLine()), new object[0], setup); Assert.DoesNotThrow(() => subject.Verify()); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "IsMatch"), new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Match"), new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Matches"), new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Replace"), new MemberDescriptor(KnownType.System_Text_RegularExpressions_Regex, "Split")), InvocationTracker.MethodIsStatic()); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.System_Text_RegularExpressions_Regex)); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod(new MemberDescriptor(KnownType.System_Diagnostics_Process, "Start")), c => IsInvalid(FirstArgument(c))); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty(new MemberDescriptor(KnownType.System_Diagnostics_ProcessStartInfo, "FileName")), PropertyAccessTracker.MatchSetter(), c => IsInvalid((string)PropertyAccessTracker.AssignedValue(c))); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor(KnownType.System_Diagnostics_ProcessStartInfo), c => ObjectCreationTracker.ConstArgumentForParameter(c, "fileName") is string value && IsInvalid(value)); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_Console, nameof(Console.OpenStandardInput)))); InvocationTracker.Track(context, WhenResultIsNotIgnored, // This is syntax-only check and we can execute it first InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_Console, nameof(Console.Read)), new MemberDescriptor(KnownType.System_Console, nameof(Console.ReadKey)), new MemberDescriptor(KnownType.System_Console, nameof(Console.ReadLine)))); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Console, nameof(Console.In)))); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod(new MemberDescriptor(KnownType.System_Diagnostics_Process, "Start")), Conditions.ExceptWhen( InvocationTracker.ArgumentAtIndexIs(0, KnownType.System_Diagnostics_ProcessStartInfo)), InvocationTracker.MethodHasParameters()); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Diagnostics_ProcessStartInfo, "FileName")), PropertyAccessTracker.MatchSetter()); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor(KnownType.System_Diagnostics_ProcessStartInfo), ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String)); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( // "RSA" is the base class for all RSA algorithm implementations new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Encrypt"), new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "EncryptValue"), new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Decrypt"), new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "DecryptValue"), // RSA methods added in NET Core 2.1 new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryEncrypt"), new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryDecrypt"), new MemberDescriptor(KnownType.System_Security_Cryptography_SymmetricAlgorithm, "CreateEncryptor"), new MemberDescriptor(KnownType.System_Security_Cryptography_SymmetricAlgorithm, "CreateDecryptor"))); BaseTypeTracker.Track(context, BaseTypeTracker.MatchSubclassesOf( KnownType.System_Security_Cryptography_AsymmetricAlgorithm, KnownType.System_Security_Cryptography_SymmetricAlgorithm)); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "Encrypt"), new MemberDescriptor(KnownType.System_Security_Cryptography_RSA, "TryEncrypt")), Conditions.Or( InvocationTracker.ArgumentIsBoolConstant("fOAEP", false), HasPkcs1PaddingArgument())); // There exist no GCM mode with AesManaged, so any mode we set will be insecure. We do not raise // when inside an ObjectInitializerExpression, as the issue is already raised on the constructor PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Security_Cryptography_AesManaged, "Mode")), PropertyAccessTracker.MatchSetter(), Conditions.ExceptWhen(IsInsideObjectInitializer())); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor(KnownType.System_Security_Cryptography_AesManaged)); }
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod(invocationsForFirstTwoArguments), Conditions.And( MethodHasRawSqlQueryParameter(), Conditions.Or(ArgumentAtIndexIsTracked(0), ArgumentAtIndexIsTracked(1)) ), Conditions.ExceptWhen(InvocationTracker.ArgumentAtIndexIsConstant(0))); TrackInvocations(context, invocationsForFirstArgument, FirstArgumentIndex); TrackInvocations(context, invocationsForSecondArgument, SecondArgumentIndex); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty(properties), PropertyAccessTracker.MatchSetter(), c => IsTracked(GetSetValue(c), c), Conditions.ExceptWhen(PropertyAccessTracker.AssignedValueIsConstant())); TrackObjectCreation(context, constructorsForFirstArgument, FirstArgumentIndex); TrackObjectCreation(context, constructorsForSecondArgument, SecondArgumentIndex); }
protected override void Initialize(SonarAnalysisContext context) { ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.System_Security_Permissions_PrincipalPermission)); ObjectCreationTracker.Track(context, ObjectCreationTracker.WhenDerivesOrImplementsAny( KnownType.System_Security_Principal_IIdentity, KnownType.System_Security_Principal_IPrincipal)); InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_Security_Principal_WindowsIdentity, "GetCurrent"), new MemberDescriptor(KnownType.System_IdentityModel_Tokens_SecurityTokenHandler, "ValidateToken"), new MemberDescriptor(KnownType.System_AppDomain, "SetPrincipalPolicy"), new MemberDescriptor(KnownType.System_AppDomain, "SetThreadPrincipal"))); PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.System_Web_HttpContext, "User"), new MemberDescriptor(KnownType.System_Threading_Thread, "CurrentPrincipal"))); MethodDeclarationTracker.Track(context, MethodDeclarationTracker.AnyParameterIsOfType( KnownType.System_Security_Principal_IIdentity, KnownType.System_Security_Principal_IPrincipal), MethodDeclarationTracker.IsOrdinaryMethod()); MethodDeclarationTracker.Track(context, MethodDeclarationTracker.DecoratedWithAnyAttribute( KnownType.System_Security_Permissions_PrincipalPermissionAttribute)); BaseTypeTracker.Track(context, BaseTypeTracker.MatchSubclassesOf( KnownType.System_Security_Principal_IIdentity, KnownType.System_Security_Principal_IPrincipal)); }
protected override void Initialize(SonarAnalysisContext context) { // ASP.NET Core InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.Microsoft_AspNetCore_Hosting_WebHostBuilderExtensions, "ConfigureLogging"), new MemberDescriptor(KnownType.Microsoft_Extensions_DependencyInjection_LoggingServiceCollectionExtensions, "AddLogging"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_ConsoleLoggerExtensions, "AddConsole"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_DebugLoggerFactoryExtensions, "AddDebug"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventLoggerFactoryExtensions, "AddEventLog"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventLoggerFactoryExtensions, "AddEventSourceLogger"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_EventSourceLoggerFactoryExtensions, "AddEventSourceLogger"), new MemberDescriptor(KnownType.Microsoft_Extensions_Logging_AzureAppServicesLoggerFactoryExtensions, "AddAzureWebAppDiagnostics")), InvocationTracker.MethodIsExtension()); ObjectCreationTracker.Track(context, ObjectCreationTracker.WhenImplements(KnownType.Microsoft_Extensions_Logging_ILoggerFactory)); // log4net InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.log4net_Config_XmlConfigurator, "Configure"), new MemberDescriptor(KnownType.log4net_Config_XmlConfigurator, "ConfigureAndWatch"), new MemberDescriptor(KnownType.log4net_Config_DOMConfigurator, "Configure"), new MemberDescriptor(KnownType.log4net_Config_DOMConfigurator, "ConfigureAndWatch"), new MemberDescriptor(KnownType.log4net_Config_BasicConfigurator, "Configure"))); // NLog PropertyAccessTracker.Track(context, PropertyAccessTracker.MatchSetter(), PropertyAccessTracker.MatchProperty( new MemberDescriptor(KnownType.NLog_LogManager, "Configuration"))); // Serilog ObjectCreationTracker.Track(context, ObjectCreationTracker.WhenDerivesFrom(KnownType.Serilog_LoggerConfiguration)); }
private void TrackInvocations(SonarAnalysisContext context, MemberDescriptor[] incovationsDescriptors, int argumentIndex) => InvocationTracker.Track(context, InvocationTracker.MatchMethod(incovationsDescriptors), ArgumentAtIndexIsTracked(argumentIndex), Conditions.ExceptWhen(InvocationTracker.ArgumentAtIndexIsConstant(argumentIndex)));
protected override void Initialize(SonarAnalysisContext context) { InvocationTracker.Track(context, InvocationTracker.MatchMethod( new MemberDescriptor(KnownType.System_IO_File, "AppendAllLines"), new MemberDescriptor(KnownType.System_IO_File, "AppendAllText"), new MemberDescriptor(KnownType.System_IO_File, "AppendText"), new MemberDescriptor(KnownType.System_IO_File, "Copy"), new MemberDescriptor(KnownType.System_IO_File, "Create"), new MemberDescriptor(KnownType.System_IO_File, "CreateText"), new MemberDescriptor(KnownType.System_IO_File, "Decrypt"), new MemberDescriptor(KnownType.System_IO_File, "Delete"), new MemberDescriptor(KnownType.System_IO_File, "Encrypt"), new MemberDescriptor(KnownType.System_IO_File, "Exists"), new MemberDescriptor(KnownType.System_IO_File, "GetAccessControl"), new MemberDescriptor(KnownType.System_IO_File, "GetAttributes"), new MemberDescriptor(KnownType.System_IO_File, "GetCreationTime"), new MemberDescriptor(KnownType.System_IO_File, "GetCreationTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "GetLastAccessTime"), new MemberDescriptor(KnownType.System_IO_File, "GetLastAccessTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "GetLastWriteTime"), new MemberDescriptor(KnownType.System_IO_File, "GetLastWriteTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "Move"), new MemberDescriptor(KnownType.System_IO_File, "Open"), new MemberDescriptor(KnownType.System_IO_File, "OpenRead"), new MemberDescriptor(KnownType.System_IO_File, "OpenText"), new MemberDescriptor(KnownType.System_IO_File, "OpenWrite"), new MemberDescriptor(KnownType.System_IO_File, "ReadAllBytes"), new MemberDescriptor(KnownType.System_IO_File, "ReadAllLines"), new MemberDescriptor(KnownType.System_IO_File, "ReadAllText"), new MemberDescriptor(KnownType.System_IO_File, "ReadLines"), new MemberDescriptor(KnownType.System_IO_File, "Replace"), new MemberDescriptor(KnownType.System_IO_File, "SetAccessControl"), new MemberDescriptor(KnownType.System_IO_File, "SetAttributes"), new MemberDescriptor(KnownType.System_IO_File, "SetCreationTime"), new MemberDescriptor(KnownType.System_IO_File, "SetCreationTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "SetLastAccessTime"), new MemberDescriptor(KnownType.System_IO_File, "SetLastAccessTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "SetLastWriteTime"), new MemberDescriptor(KnownType.System_IO_File, "SetLastWriteTimeUtc"), new MemberDescriptor(KnownType.System_IO_File, "WriteAllBytes"), new MemberDescriptor(KnownType.System_IO_File, "WriteAllLines"), new MemberDescriptor(KnownType.System_IO_File, "WriteAllText"), new MemberDescriptor(KnownType.System_IO_Directory, "CreateDirectory"), new MemberDescriptor(KnownType.System_IO_Directory, "Delete"), new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateDirectories"), new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateFiles"), new MemberDescriptor(KnownType.System_IO_Directory, "EnumerateFileSystemEntries"), new MemberDescriptor(KnownType.System_IO_Directory, "Exists"), new MemberDescriptor(KnownType.System_IO_Directory, "GetAccessControl"), new MemberDescriptor(KnownType.System_IO_Directory, "GetCreationTime"), new MemberDescriptor(KnownType.System_IO_Directory, "GetCreationTimeUtc"), new MemberDescriptor(KnownType.System_IO_Directory, "GetCurrentDirectory"), new MemberDescriptor(KnownType.System_IO_Directory, "GetDirectories"), new MemberDescriptor(KnownType.System_IO_Directory, "GetDirectoryRoot"), new MemberDescriptor(KnownType.System_IO_Directory, "GetFiles"), new MemberDescriptor(KnownType.System_IO_Directory, "GetFileSystemEntries"), new MemberDescriptor(KnownType.System_IO_Directory, "GetLastAccessTime"), new MemberDescriptor(KnownType.System_IO_Directory, "GetLastAccessTimeUtc"), new MemberDescriptor(KnownType.System_IO_Directory, "GetLastWriteTime"), new MemberDescriptor(KnownType.System_IO_Directory, "GetLastWriteTimeUtc"), new MemberDescriptor(KnownType.System_IO_Directory, "GetLogicalDrives"), new MemberDescriptor(KnownType.System_IO_Directory, "GetParent"), new MemberDescriptor(KnownType.System_IO_Directory, "Move"), new MemberDescriptor(KnownType.System_IO_Directory, "SetAccessControl"), new MemberDescriptor(KnownType.System_IO_Directory, "SetCreationTime"), new MemberDescriptor(KnownType.System_IO_Directory, "SetCreationTimeUtc"), new MemberDescriptor(KnownType.System_IO_Directory, "SetCurrentDirectory"), new MemberDescriptor(KnownType.System_IO_Directory, "SetLastAccessTime"), new MemberDescriptor(KnownType.System_IO_Directory, "SetLastAccessTimeUtc"), new MemberDescriptor(KnownType.System_IO_Directory, "SetLastWriteTime"), new MemberDescriptor(KnownType.System_IO_Directory, "SetLastWriteTimeUtc"), new MemberDescriptor(KnownType.System_IO_Path, "GetTempFileName"), new MemberDescriptor(KnownType.System_IO_Path, "GetTempPath"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetEnumerator"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForApplication"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForAssembly"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetMachineStoreForDomain"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetStore"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForApplication"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForAssembly"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForDomain"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "GetUserStoreForSite"), new MemberDescriptor(KnownType.System_IO_IsolatedStorage_IsolatedStorageFile, "Remove"), new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateFromFile"), new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateNew"), new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "CreateOrOpen"), new MemberDescriptor(KnownType.System_IO_MemoryMappedFiles_MemoryMappedFile, "OpenExisting"), new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "CreateFromDirectory"), new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "ExtractToDirectory"), new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "Open"), new MemberDescriptor(KnownType.System_IO_Compression_ZipFile, "OpenRead"))); InvocationTracker.Track(context, InvocationTracker.MethodNameIs("CreateFile"), InvocationTracker.MethodIsExtern()); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.System_IO_StreamWriter, KnownType.System_IO_StreamReader, KnownType.System_Security_AccessControl_FileSecurity), ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.System_String)); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.System_IO_FileInfo, KnownType.System_IO_DirectoryInfo, KnownType.System_IO_IsolatedStorage_IsolatedStorageFileStream, KnownType.Microsoft_Win32_SafeHandles_SafeFileHandle)); ObjectCreationTracker.Track(context, ObjectCreationTracker.MatchConstructor( KnownType.System_IO_FileStream), Conditions.ExceptWhen( ObjectCreationTracker.ArgumentAtIndexIs(0, KnownType.Microsoft_Win32_SafeHandles_SafeFileHandle))); }