mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-11-15 01:48:52 -07:00
Add fuzzing infra
This commit is contained in:
parent
b986cb57b7
commit
f7392394fd
1
.gitignore
vendored
1
.gitignore
vendored
@ -268,6 +268,7 @@ doc/
|
||||
# Deployment artifacts
|
||||
dist
|
||||
*.exe
|
||||
*.dll
|
||||
|
||||
# BenchmarkDotNet artifacts
|
||||
BenchmarkDotNet.Artifacts
|
||||
|
1
fuzz/.gitignore
vendored
Normal file
1
fuzz/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
Findings
|
@ -0,0 +1,18 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Emby.Server.Implementations">
|
||||
<HintPath>Emby.Server.Implementations.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SharpFuzz" Version="1.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
32
fuzz/Emby.Server.Implementations.Fuzz/Program.cs
Normal file
32
fuzz/Emby.Server.Implementations.Fuzz/Program.cs
Normal file
@ -0,0 +1,32 @@
|
||||
using System;
|
||||
using Emby.Server.Implementations.Library;
|
||||
using SharpFuzz;
|
||||
|
||||
namespace Emby.Server.Implementations.Fuzz
|
||||
{
|
||||
public static class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
switch (args[0])
|
||||
{
|
||||
case "PathExtensions.TryReplaceSubPath": Run(PathExtensions_TryReplaceSubPath); return;
|
||||
default: throw new ArgumentException($"Unknown fuzzing function: {args[0]}");
|
||||
}
|
||||
}
|
||||
|
||||
private static void Run(Action<string> action) => Fuzzer.OutOfProcess.Run(action);
|
||||
|
||||
private static void PathExtensions_TryReplaceSubPath(string data)
|
||||
{
|
||||
// Stupid, but it worked
|
||||
var parts = data.Split(':');
|
||||
if (parts.Length != 3)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_ = PathExtensions.TryReplaceSubPath(parts[0], parts[1], parts[2], out _);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
/fuzz/Emby.Server.Implementations.Fuzz/Testcases/PathExtensions.TryReplaceSubPath/test1.txt/:/home/bond/dev/jellyfin/:/srv/jellyfin/
|
11
fuzz/Emby.Server.Implementations.Fuzz/fuzz.sh
Executable file
11
fuzz/Emby.Server.Implementations.Fuzz/fuzz.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
dotnet build -c Release ../../Emby.Server.Implementations/Emby.Server.Implementations.csproj --output bin
|
||||
sharpfuzz bin/Emby.Server.Implementations.dll
|
||||
cp bin/Emby.Server.Implementations.dll .
|
||||
|
||||
dotnet build
|
||||
mkdir -p Findings
|
||||
AFL_SKIP_BIN_CHECK=1 afl-fuzz -i "Testcases/$1" -o "Findings/$1" -t 5000 -m 10240 dotnet bin/Debug/net5.0/Emby.Server.Implementations.Fuzz.dll "$1"
|
22
fuzz/Jellyfin.Server.Fuzz/Jellyfin.Server.Fuzz.csproj
Normal file
22
fuzz/Jellyfin.Server.Fuzz/Jellyfin.Server.Fuzz.csproj
Normal file
@ -0,0 +1,22 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Reference Include="Jellyfin.Server">
|
||||
<HintPath>jellyfin.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="../../MediaBrowser.Common/MediaBrowser.Common.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="SharpFuzz" Version="1.6.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
33
fuzz/Jellyfin.Server.Fuzz/Program.cs
Normal file
33
fuzz/Jellyfin.Server.Fuzz/Program.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Jellyfin.Server.Middleware;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Http.Features;
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using SharpFuzz;
|
||||
|
||||
namespace Emby.Server.Implementations.Fuzz
|
||||
{
|
||||
public static class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
switch (args[0])
|
||||
{
|
||||
case "UrlDecodeQueryFeature": Run(UrlDecodeQueryFeature); return;
|
||||
default: throw new ArgumentException($"Unknown fuzzing function: {args[0]}");
|
||||
}
|
||||
}
|
||||
|
||||
private static void Run(Action<string> action) => Fuzzer.OutOfProcess.Run(action);
|
||||
|
||||
private static void UrlDecodeQueryFeature(string data)
|
||||
{
|
||||
var dict = new Dictionary<string, StringValues>
|
||||
{
|
||||
{ data, StringValues.Empty }
|
||||
};
|
||||
_ = new UrlDecodeQueryFeature(new QueryFeature(new QueryCollection(dict)));
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1 @@
|
||||
a%3D1%26b%3D2%26c%3D3
|
11
fuzz/Jellyfin.Server.Fuzz/fuzz.sh
Executable file
11
fuzz/Jellyfin.Server.Fuzz/fuzz.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
dotnet build -c Release ../../Jellyfin.Server/Jellyfin.Server.csproj --output bin
|
||||
sharpfuzz bin/jellyfin.dll
|
||||
cp bin/jellyfin.dll .
|
||||
|
||||
dotnet build
|
||||
mkdir -p Findings
|
||||
AFL_SKIP_BIN_CHECK=1 afl-fuzz -i "Testcases/$1" -o "Findings/$1" -t 5000 -m 10240 dotnet bin/Debug/net5.0/Jellyfin.Server.Fuzz.dll "$1"
|
Loading…
Reference in New Issue
Block a user