mirror of https://github.com/google/oss-fuzz.git
79 lines
1.8 KiB
Markdown
79 lines
1.8 KiB
Markdown
---
|
|
layout: default
|
|
title: Integrating a Swift project
|
|
parent: Setting up a new project
|
|
grand_parent: Getting started
|
|
nav_order: 1
|
|
permalink: /getting-started/new-project-guide/swift-lang/
|
|
---
|
|
|
|
# Integrating a Swift project
|
|
{: .no_toc}
|
|
|
|
- TOC
|
|
{:toc}
|
|
---
|
|
|
|
The process of integrating a project written in Swift with OSS-Fuzz is very similar
|
|
to the general
|
|
[Setting up a new project]({{ site.baseurl }}/getting-started/new-project-guide/)
|
|
process. The key specifics of integrating a Swift project are outlined below.
|
|
|
|
## Project files
|
|
|
|
First, you need to write a Swift fuzz target that accepts a stream of bytes and
|
|
calls the program API with that. This fuzz target should reside in your project
|
|
repository.
|
|
|
|
The structure of the project directory in OSS-Fuzz repository doesn't differ for
|
|
projects written in Swift. The project files have the following Swift specific
|
|
aspects.
|
|
|
|
### project.yaml
|
|
|
|
The `language` attribute must be specified.
|
|
|
|
```yaml
|
|
language: swift
|
|
```
|
|
|
|
The only supported fuzzing engine is `libfuzzer`
|
|
|
|
The supported sanitizers are and `address`, `thread`
|
|
|
|
[Example](https://github.com/google/oss-fuzz/blob/2a15c3c88b21f4f1be2a7ff115f72bd7a08e34ac/projects/swift-nio/project.yaml#L9):
|
|
|
|
```yaml
|
|
fuzzing_engines:
|
|
- libfuzzer
|
|
sanitizers:
|
|
- address
|
|
- thread
|
|
```
|
|
|
|
### Dockerfile
|
|
|
|
The Dockerfile should start by `FROM gcr.io/oss-fuzz-base/base-builder-swift`
|
|
instead of using the simple base-builder
|
|
|
|
### build.sh
|
|
|
|
A `precompile_swift` generates an environment variable `SWIFTFLAGS`
|
|
This can then be used in the building command such as `swift build -c release $SWIFTFLAGS`
|
|
|
|
|
|
A usage example from swift-protobuf project is
|
|
|
|
```sh
|
|
. precompile_swift
|
|
# build project
|
|
cd FuzzTesting
|
|
swift build -c debug $SWIFTFLAGS
|
|
|
|
(
|
|
cd .build/debug/
|
|
find . -maxdepth 1 -type f -name "*Fuzzer" -executable | while read i; do cp $i $OUT/"$i"-debug; done
|
|
)
|
|
|
|
```
|