Skip to content

Commit

Permalink
Initial implementation of Mayhem and fuzzing
Browse files Browse the repository at this point in the history
  • Loading branch information
aaronjsteele authored and ForAllSecure Mayhem Bot committed Oct 9, 2024
1 parent d013ece commit 16d3b32
Show file tree
Hide file tree
Showing 231 changed files with 409 additions and 0 deletions.
61 changes: 61 additions & 0 deletions .github/workflows/mayhem.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Mayhem
on:
push:
pull_request:
workflow_dispatch:

env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
MAYHEMFILE: Mayhemfile
PROJECTNAME: kdl-rs

jobs:
build:
name: '${{ matrix.os }} shared=${{ matrix.shared }} ${{ matrix.build_type }}'
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
shared: [false]
build_type: [Release]
include:
- os: ubuntu-latest
triplet: x64-linux

steps:
- uses: actions/checkout@v2

- name: Log in to the Container registry
uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}

- name: Build and push Docker image
uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
file: Dockerfile.mayhem

- name: Start analysis of kdl-rs parse
uses: ForAllSecure/mcode-action@v1
with:
mayhem-token: ${{ secrets.MAYHEM_TOKEN }}
args: --image ${{ steps.meta.outputs.tags }} --project ${{ env.PROJECTNAME }} --file ${{ env.MAYHEMFILE }}
sarif-output: sarif

- name: Upload SARIF file(s)
uses: github/codeql-action/upload-sarif@v1
with:
sarif_file: sarif
21 changes: 21 additions & 0 deletions Dockerfile.mayhem
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Use the example in Mayhem Docs as an example/starting point
FROM rust:1.60-buster as rust-builder
RUN cargo install afl

# Add the source code to the image and build the target
ADD . /kdl-rs
WORKDIR /kdl-rs/fuzz
RUN cargo afl build
# Built target is: /kdl-rs/fuzz/target/debug/fuzz

# To simplify matters, we'll copy the compiled target as well as
# the fuzz input folder to a new image with AFL. This helps save some space.
FROM --platform=linux/amd64 rust:1.60-buster
RUN cargo install afl

# Copy the compiled target and the input cases
COPY --from=rust-builder /kdl-rs/fuzz/target/debug/fuzz /kdl-rs/fuzz/in /

# Set to fuzz!
ENTRYPOINT ["cargo", "afl", "fuzz", "-i", "/in", "-o", "/out"]
CMD ["/fuzz"]
9 changes: 9 additions & 0 deletions Mayhemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
project: kdl-rs
target: kdl-rs-parse
duration: 300

cmds:
- cmd: /fuzz
env:
DISABLE_SMOKETEST: '1'
afl: true
2 changes: 2 additions & 0 deletions fuzz/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
target
out
10 changes: 10 additions & 0 deletions fuzz/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[package]
name = "fuzz"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
afl = "*"
kdl = { path = ".." }
1 change: 1 addition & 0 deletions fuzz/in/all_escapes.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node "\"\\\/\b\f\n\r\t"
3 changes: 3 additions & 0 deletions fuzz/in/all_node_fields.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node "arg" prop="val" {
inner_node
}
1 change: 1 addition & 0 deletions fuzz/in/arg_and_prop_same_name.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node "arg" arg="val"
1 change: 1 addition & 0 deletions fuzz/in/arg_false_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)false
1 change: 1 addition & 0 deletions fuzz/in/arg_float_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)2.5
1 change: 1 addition & 0 deletions fuzz/in/arg_hex_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)0x10
1 change: 1 addition & 0 deletions fuzz/in/arg_null_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)null
1 change: 1 addition & 0 deletions fuzz/in/arg_raw_string_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)"str"
1 change: 1 addition & 0 deletions fuzz/in/arg_string_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)"str"
1 change: 1 addition & 0 deletions fuzz/in/arg_true_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)true
1 change: 1 addition & 0 deletions fuzz/in/arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)"arg"
1 change: 1 addition & 0 deletions fuzz/in/arg_zero_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)0
1 change: 1 addition & 0 deletions fuzz/in/asterisk_in_block_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /* * */
1 change: 1 addition & 0 deletions fuzz/in/backslash_in_bare_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foo123\bar "weeee"
1 change: 1 addition & 0 deletions fuzz/in/bare_arg.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node a
1 change: 1 addition & 0 deletions fuzz/in/bare_emoji.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
😁 "happy!"
1 change: 1 addition & 0 deletions fuzz/in/binary.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0b10
1 change: 1 addition & 0 deletions fuzz/in/binary_trailing_underscore.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0b10_
1 change: 1 addition & 0 deletions fuzz/in/binary_underscore.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0b1_0
1 change: 1 addition & 0 deletions fuzz/in/blank_arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node ("")10
1 change: 1 addition & 0 deletions fuzz/in/blank_node_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
("")node
1 change: 1 addition & 0 deletions fuzz/in/blank_prop_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=("")true
1 change: 1 addition & 0 deletions fuzz/in/block_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /* comment */ "arg"
1 change: 1 addition & 0 deletions fuzz/in/block_comment_after_node.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /* hey */ "arg"
1 change: 1 addition & 0 deletions fuzz/in/block_comment_before_node.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* hey */ node
1 change: 1 addition & 0 deletions fuzz/in/block_comment_before_node_no_space.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* hey*/node
1 change: 1 addition & 0 deletions fuzz/in/block_comment_newline.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* hey */
1 change: 1 addition & 0 deletions fuzz/in/boolean_arg.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node false true
1 change: 1 addition & 0 deletions fuzz/in/boolean_prop.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node prop1=true prop2=false
1 change: 1 addition & 0 deletions fuzz/in/brackets_in_bare_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foo123{bar}foo "weeee"
1 change: 1 addition & 0 deletions fuzz/in/chevrons_in_bare_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foo123<bar>foo "weeee"
1 change: 1 addition & 0 deletions fuzz/in/comma_in_bare_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
foo123,bar "weeee"
1 change: 1 addition & 0 deletions fuzz/in/comment_after_arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)/*huh*/10
1 change: 1 addition & 0 deletions fuzz/in/comment_after_node_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(type)/*huh*/node
1 change: 1 addition & 0 deletions fuzz/in/comment_after_prop_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=(type)/*huh*/10
1 change: 1 addition & 0 deletions fuzz/in/comment_in_arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type/*huh*/)10
1 change: 1 addition & 0 deletions fuzz/in/comment_in_node_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(type/*huh*/)node
1 change: 1 addition & 0 deletions fuzz/in/comment_in_prop_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=(type/*huh*/)10
1 change: 1 addition & 0 deletions fuzz/in/commented_arg.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /- "arg1" "arg2"
3 changes: 3 additions & 0 deletions fuzz/in/commented_child.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node "arg" /- {
inner_node
}
2 changes: 2 additions & 0 deletions fuzz/in/commented_line.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// node_1
node_2
2 changes: 2 additions & 0 deletions fuzz/in/commented_node.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/- node_1
node_2
1 change: 1 addition & 0 deletions fuzz/in/commented_prop.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /- prop="val" "arg"
2 changes: 2 additions & 0 deletions fuzz/in/crlf_between_nodes.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node1
node2
1 change: 1 addition & 0 deletions fuzz/in/dash_dash.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node --
1 change: 1 addition & 0 deletions fuzz/in/dot_but_no_fraction.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.
1 change: 1 addition & 0 deletions fuzz/in/dot_but_no_fraction_before_exponent.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.e7
1 change: 1 addition & 0 deletions fuzz/in/dot_in_exponent.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.0.0
1 change: 1 addition & 0 deletions fuzz/in/dot_zero.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node .0
1 change: 1 addition & 0 deletions fuzz/in/emoji.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node "😀"
Empty file added fuzz/in/empty.kdl
Empty file.
1 change: 1 addition & 0 deletions fuzz/in/empty_arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node ()10
2 changes: 2 additions & 0 deletions fuzz/in/empty_child.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node {
}
2 changes: 2 additions & 0 deletions fuzz/in/empty_child_different_lines.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node {
}
1 change: 1 addition & 0 deletions fuzz/in/empty_child_same_line.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node {}
3 changes: 3 additions & 0 deletions fuzz/in/empty_child_whitespace.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node {

}
1 change: 1 addition & 0 deletions fuzz/in/empty_node_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
()node
1 change: 1 addition & 0 deletions fuzz/in/empty_prop_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=()false
1 change: 1 addition & 0 deletions fuzz/in/empty_quoted_node_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
"" "arg"
1 change: 1 addition & 0 deletions fuzz/in/empty_quoted_prop_key.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node ""="empty"
1 change: 1 addition & 0 deletions fuzz/in/empty_string_arg.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node ""
1 change: 1 addition & 0 deletions fuzz/in/esc_newline_in_string.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node "hello\nworld"
1 change: 1 addition & 0 deletions fuzz/in/esc_unicode_in_string.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node "hello\u{0a}world"
2 changes: 2 additions & 0 deletions fuzz/in/escline.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node \
"arg"
3 changes: 3 additions & 0 deletions fuzz/in/escline_comment_node.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node1
\// hey
node2
4 changes: 4 additions & 0 deletions fuzz/in/escline_line_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node \ // comment
"arg" \// comment
"arg2
"
2 changes: 2 additions & 0 deletions fuzz/in/escline_node.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
node1
node2
1 change: 1 addition & 0 deletions fuzz/in/false_prefix_in_bare_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
false_id
1 change: 1 addition & 0 deletions fuzz/in/false_prefix_in_prop_key.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node false_id=1
1 change: 1 addition & 0 deletions fuzz/in/false_prop_key.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node false=1
1 change: 1 addition & 0 deletions fuzz/in/hex.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0x1234567890abcdef
1 change: 1 addition & 0 deletions fuzz/in/hex_int.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0x1234567890ABCDEF
1 change: 1 addition & 0 deletions fuzz/in/hex_int_underscores.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0xABC_def_0123
1 change: 1 addition & 0 deletions fuzz/in/hex_leading_zero.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0x01
1 change: 1 addition & 0 deletions fuzz/in/illegal_char_in_binary.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0bx01
1 change: 1 addition & 0 deletions fuzz/in/illegal_char_in_hex.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0x10g10
1 change: 1 addition & 0 deletions fuzz/in/illegal_char_in_octal.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0o45678
1 change: 1 addition & 0 deletions fuzz/in/int_multiple_underscore.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1_2_3_4
1 change: 1 addition & 0 deletions fuzz/in/just_block_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/* hey */
3 changes: 3 additions & 0 deletions fuzz/in/just_child.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node {
inner_node
}
1 change: 1 addition & 0 deletions fuzz/in/just_newline.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions fuzz/in/just_node_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node
1 change: 1 addition & 0 deletions fuzz/in/just_space.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions fuzz/in/just_space_in_arg_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node ( )false
1 change: 1 addition & 0 deletions fuzz/in/just_space_in_node_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
( )node
1 change: 1 addition & 0 deletions fuzz/in/just_space_in_prop_type.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=()0x10
1 change: 1 addition & 0 deletions fuzz/in/just_type_no_arg.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node (type)
1 change: 1 addition & 0 deletions fuzz/in/just_type_no_node_id.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(type)
1 change: 1 addition & 0 deletions fuzz/in/just_type_no_prop.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node key=(type)
2 changes: 2 additions & 0 deletions fuzz/in/leading_newline.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

node
1 change: 1 addition & 0 deletions fuzz/in/leading_zero_binary.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0b01
1 change: 1 addition & 0 deletions fuzz/in/leading_zero_int.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 011
1 change: 1 addition & 0 deletions fuzz/in/leading_zero_oct.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0o01
4 changes: 4 additions & 0 deletions fuzz/in/multiline_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node /*
some
comments
*/ "arg"
3 changes: 3 additions & 0 deletions fuzz/in/multiline_nodes.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node \
"arg1" \// comment
"arg2"
4 changes: 4 additions & 0 deletions fuzz/in/multiline_string.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node " hey
everyone
how goes?
"
1 change: 1 addition & 0 deletions fuzz/in/multiple_dots_in_float.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.0.0
1 change: 1 addition & 0 deletions fuzz/in/multiple_dots_in_float_before_exponent.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.0.0e7
1 change: 1 addition & 0 deletions fuzz/in/multiple_es_in_float.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.0E10e10
1 change: 1 addition & 0 deletions fuzz/in/multiple_x_in_hex.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 0xx10
1 change: 1 addition & 0 deletions fuzz/in/negative_exponent.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node 1.0e-10
1 change: 1 addition & 0 deletions fuzz/in/negative_float.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node -1.0 key=-10.0
1 change: 1 addition & 0 deletions fuzz/in/negative_int.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node -10 prop=-15
1 change: 1 addition & 0 deletions fuzz/in/nested_block_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /* hi /* there */ everyone */ "arg"
5 changes: 5 additions & 0 deletions fuzz/in/nested_children.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node1 {
node2 {
node
}
}
1 change: 1 addition & 0 deletions fuzz/in/nested_comments.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node /*/* nested */*/ "arg"
6 changes: 6 additions & 0 deletions fuzz/in/nested_multiline_block_comment.kdl
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
node /*
hey /*
how's
*/
it going
*/ "arg"
Loading

0 comments on commit 16d3b32

Please sign in to comment.