mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-12-27 09:56:33 +00: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
|
# Deployment artifacts
|
||||||
dist
|
dist
|
||||||
*.exe
|
*.exe
|
||||||
|
*.dll
|
||||||
|
|
||||||
# BenchmarkDotNet artifacts
|
# BenchmarkDotNet artifacts
|
||||||
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 a new issue