Skip to content

Commit

Permalink
Add fuzzing (#804)
Browse files Browse the repository at this point in the history
* Add baseline fuzz configuration

* Fix buffer overrun parsing guids

* Trim output for faster fuzzing

* Better size testing in SDToString

* better size check

* update ignora, add fuzz instructions to readme

* update readme

* More robust SD validation

* update unit test
  • Loading branch information
stephenegriffin authored Dec 31, 2024
1 parent 7b7dd1d commit e58089a
Show file tree
Hide file tree
Showing 14 changed files with 385 additions and 40 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,5 @@
/.vs
/node_modules
/packages
/fuzz/corpus/
/fuzz/artifacts/
46 changes: 20 additions & 26 deletions MFCMapi.sln
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,8 @@ Global
Debug_Unicode|x64 = Debug_Unicode|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Prefast_Unicode|Win32 = Prefast_Unicode|Win32
Prefast_Unicode|x64 = Prefast_Unicode|x64
Fuzz|Win32 = Fuzz|Win32
Fuzz|x64 = Fuzz|x64
Prefast_Unicode|Win32 = Prefast_Unicode|Win32
Prefast_Unicode|x64 = Prefast_Unicode|x64
Prefast|Win32 = Prefast|Win32
Expand All @@ -56,10 +56,10 @@ Global
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Debug|Win32.Build.0 = Debug|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Debug|x64.ActiveCfg = Debug|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Debug|x64.Build.0 = Debug|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|x64.ActiveCfg = Debug|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|x64.Build.0 = Debug|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Fuzz|Win32.ActiveCfg = Fuzz|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Fuzz|Win32.Build.0 = Fuzz|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Fuzz|x64.ActiveCfg = Fuzz|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Fuzz|x64.Build.0 = Fuzz|x64
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{466117D5-278C-46E6-BC2E-4FA7B25C0B3F}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand All @@ -84,10 +84,8 @@ Global
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Debug|Win32.Build.0 = Debug|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Debug|x64.ActiveCfg = Debug|x64
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Debug|x64.Build.0 = Debug|x64
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|x64.Build.0 = Prefast_Unicode|x64
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Fuzz|Win32.ActiveCfg = Release_Unicode|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Fuzz|x64.ActiveCfg = Release_Unicode|x64
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{7AFE5655-71D0-4390-A4E0-BA915DFC18C4}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand All @@ -112,10 +110,8 @@ Global
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Debug|Win32.Build.0 = Debug|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Debug|x64.ActiveCfg = Debug|x64
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Debug|x64.Build.0 = Debug|x64
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|x64.Build.0 = Prefast_Unicode|x64
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Fuzz|Win32.ActiveCfg = Release_Unicode|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Fuzz|x64.ActiveCfg = Release_Unicode|x64
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{B8B4C7F7-682E-40EF-B5AC-054187818E23}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand All @@ -140,10 +136,10 @@ Global
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Debug|Win32.Build.0 = Debug|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Debug|x64.ActiveCfg = Debug|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Debug|x64.Build.0 = Debug|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|x64.Build.0 = Prefast_Unicode|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Fuzz|Win32.ActiveCfg = Fuzz|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Fuzz|Win32.Build.0 = Fuzz|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Fuzz|x64.ActiveCfg = Fuzz|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Fuzz|x64.Build.0 = Fuzz|x64
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{D2390ABA-E7B0-476D-BB38-089FEAB5357D}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand All @@ -168,10 +164,10 @@ Global
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Debug|Win32.Build.0 = Debug|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Debug|x64.ActiveCfg = Debug|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Debug|x64.Build.0 = Debug|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|x64.Build.0 = Prefast_Unicode|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Fuzz|Win32.ActiveCfg = Fuzz|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Fuzz|Win32.Build.0 = Fuzz|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Fuzz|x64.ActiveCfg = Fuzz|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Fuzz|x64.Build.0 = Fuzz|x64
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{ACD4DD9F-0FB8-42C8-BC1C-25A5A29CB40C}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand All @@ -196,10 +192,8 @@ Global
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Debug|Win32.Build.0 = Debug|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Debug|x64.ActiveCfg = Debug|x64
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Debug|x64.Build.0 = Debug|x64
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|x64.Build.0 = Prefast_Unicode|x64
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Fuzz|Win32.ActiveCfg = Release_Unicode|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Fuzz|x64.ActiveCfg = Release_Unicode|x64
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|Win32.ActiveCfg = Prefast_Unicode|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|Win32.Build.0 = Prefast_Unicode|Win32
{0E30B8F5-4480-4130-BC46-BABA613B983F}.Prefast_Unicode|x64.ActiveCfg = Prefast_Unicode|x64
Expand Down
128 changes: 128 additions & 0 deletions MFCMapi.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Fuzz|Win32">
<Configuration>Fuzz</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Fuzz|x64">
<Configuration>Fuzz</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Prefast_Unicode|Win32">
<Configuration>Prefast_Unicode</Configuration>
<Platform>Win32</Platform>
Expand Down Expand Up @@ -105,6 +113,17 @@
<SpectreMitigation>Spectre</SpectreMitigation>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<UseDebugLibraries>false</UseDebugLibraries>
<SpectreMitigation>Spectre</SpectreMitigation>
<WholeProgramOptimization>true</WholeProgramOptimization>
<EnableASAN>true</EnableASAN>
<EnableFuzzer>true</EnableFuzzer>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
Expand Down Expand Up @@ -159,6 +178,17 @@
<SpectreMitigation>Spectre</SpectreMitigation>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
<CharacterSet>Unicode</CharacterSet>
<PlatformToolset>v143</PlatformToolset>
<UseDebugLibraries>false</UseDebugLibraries>
<SpectreMitigation>Spectre</SpectreMitigation>
<WholeProgramOptimization>true</WholeProgramOptimization>
<EnableASAN>true</EnableASAN>
<EnableFuzzer>true</EnableFuzzer>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>Static</UseOfMfc>
Expand Down Expand Up @@ -186,6 +216,9 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Unicode|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
Expand All @@ -204,6 +237,9 @@
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release_Unicode|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
Expand Down Expand Up @@ -234,6 +270,9 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Unicode|Win32'">
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|Win32'">
<LibraryPath>$(VC_ReferencesPath_VC_x86);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug_Unicode|x64'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
Expand All @@ -252,6 +291,9 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release_Unicode|x64'">
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|x64'">
<LibraryPath>$(VC_ReferencesPath_VC_x64);$(LibraryPath)</LibraryPath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
Expand Down Expand Up @@ -374,6 +416,48 @@
<AdditionalManifestFiles>$(ProjectDir)\mfcmapi.exe.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;UNICODE;FUZZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<FunctionLevelLinking>true</FunctionLevelLinking>
<SDLCheck>true</SDLCheck>
<IntrinsicFunctions>true</IntrinsicFunctions>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<WholeProgramOptimization>true</WholeProgramOptimization>
<LanguageStandard>stdcpplatest</LanguageStandard>
<BuildStlModules>false</BuildStlModules>
<ControlFlowGuard>Guard</ControlFlowGuard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_AFXDLL;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<AdditionalOptions>/safeseh %(AdditionalOptions)</AdditionalOptions>
<AdditionalDependencies>version.lib;MFCMapi.res;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<SwapRunFromNET>true</SwapRunFromNET>
<SetChecksum>true</SetChecksum>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(SolutionDir)obj\$(Platform)\core\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
<CETCompat>true</CETCompat>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
<Manifest>
<AdditionalManifestFiles>$(ProjectDir)\mfcmapi.exe.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release_Unicode|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
Expand Down Expand Up @@ -414,6 +498,47 @@
<AdditionalManifestFiles>$(ProjectDir)\mfcmapi.exe.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Fuzz|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<AdditionalIncludeDirectories>$(SolutionDir)\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;UNICODE;FUZZ;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<PrecompiledHeader>Use</PrecompiledHeader>
<WarningLevel>Level4</WarningLevel>
<TreatWarningAsError>true</TreatWarningAsError>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
<FunctionLevelLinking>true</FunctionLevelLinking>
<SDLCheck>true</SDLCheck>
<IntrinsicFunctions>true</IntrinsicFunctions>
<BasicRuntimeChecks>Default</BasicRuntimeChecks>
<WholeProgramOptimization>true</WholeProgramOptimization>
<LanguageStandard>stdcpplatest</LanguageStandard>
<BuildStlModules>false</BuildStlModules>
<ControlFlowGuard>Guard</ControlFlowGuard>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>_AFXDLL;NDEBUG;_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ResourceCompile>
<Link>
<AdditionalDependencies>version.lib;MFCMapi.res;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<SwapRunFromNET>true</SwapRunFromNET>
<SetChecksum>true</SetChecksum>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalLibraryDirectories>$(SolutionDir)obj\$(Platform)\core\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<TreatLinkerWarningAsErrors>true</TreatLinkerWarningAsErrors>
<CETCompat>true</CETCompat>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
<Manifest>
<AdditionalManifestFiles>$(ProjectDir)\mfcmapi.exe.manifest</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
Expand Down Expand Up @@ -889,6 +1014,9 @@
<ClCompile Include="UI\ViewPane\ViewPane.cpp" />
<ClCompile Include="UI\mapiui.cpp" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="fuzz\fuzz.cpp" />
</ItemGroup>
<ItemGroup>
<CustomBuildStep Include="mfcmapi.exe.manifest" />
</ItemGroup>
Expand Down
6 changes: 6 additions & 0 deletions MFCMapi.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,9 @@
<Filter Include="Source Files\UI\Controls\PaneHeader">
<UniqueIdentifier>{903023f1-9e01-4c14-a5e9-e129b5c7f8a9}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\fuzz">
<UniqueIdentifier>{56bd509d-6bf7-4d82-baca-407d35286b90}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<None Include=".clang-format" />
Expand Down Expand Up @@ -264,6 +267,9 @@
<ClCompile Include="UI\Controls\PaneHeader\PaneHeader.cpp">
<Filter>Source Files\UI\Controls\PaneHeader</Filter>
</ClCompile>
<ClCompile Include="fuzz\fuzz.cpp">
<Filter>Source Files\fuzz</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClCompile Include="UI\DoubleBuffer.cpp">
Expand Down
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,19 @@ MFCMAPI provides access to MAPI stores to facilitate investigation of Exchange a

MFCMAPI depends on the [MAPI Stub Library](https://github.com/microsoft/MAPIStubLibrary). When cloning, make sure to clone submodules. See [Contributing](CONTRIBUTING.md) for more details.

## Fuzzing

MFCMAPI supports fuzzing with [libFuzzer](https://llvm.org/docs/LibFuzzer.html) and the [fsanitize](https://learn.microsoft.com/en-us/cpp/build/reference/fsanitize?view=msvc-170) switch in Visual Studio. See [fuzz.cpp](https://github.com/microsoft/mfcmapi/blob/main/fuzz/fuzz.cpp) for details.
To run fuzzing for this project, follow these steps:
1. **Switch Solution Configuration**:
- Open MFCMAPI.sln in Visual Studio.
- In the toolbar, locate the **Solution Configurations** dropdown.
- Select **Fuzz** from the list of configurations.

2. **Debug Command Line Parameters**:
- When running the fuzzing tests, use the following command line parameters:
`$(ProjectDir)fuzz\corpus $(ProjectDir)UnitTest\SmartViewTestData\In -artifact_prefix=fuzz\artifacts\`

## Help/Feedback

For assistance using MFCMAPI, developing add-ins, or general MAPI development, consult the [documentation](docs/Documentation.md). Find a bug? Need help? Have a suggestion? Report your issues through the [issues tab](https://github.com/microsoft/mfcmapi/issues).
Expand Down
Loading

0 comments on commit e58089a

Please sign in to comment.