# FAAD2 - Freeware Advanced Audio (AAC) Decoder including SBR decoding
# Copyright (C) 2003-2005 M. Bakker, Nero AG, http://www.nero.com
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# Any non-GPL usage of this software or parts of this software is strictly
# forbidden.
#
# The "appropriate copyright message" mentioned in section 2c of the GPLv2
# must read: "Code from FAAD2 is copyright (c) Nero AG, www.nero.com"
#
# Commercial non-GPL licensing of this software is possible.
# For more info contact Nero AG through Mpeg4AAClicense@nero.com.

name: OSS-Fuzz
on:
  push:
    branches: [master]
  pull_request:
    types: [opened, reopened, labeled, synchronize]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }}
  cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
  Fuzzing:
    runs-on: ubuntu-latest
    strategy:
     fail-fast: false
     matrix:
       sanitizer: [address, undefined, memory]
    steps:
    - name: Build Fuzzers (${{ matrix.sanitizer }})
      id: build
      uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
      with:
        oss-fuzz-project-name: 'faad2'
        language: c
        sanitizer: ${{ matrix.sanitizer }}
    - name: Run Fuzzers (${{ matrix.sanitizer }})
      uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
      with:
        oss-fuzz-project-name: 'faad'
        language: c
        sanitizer: ${{ matrix.sanitizer }}
        fuzz-seconds: 600
    - name: Upload Crash
      uses: actions/upload-artifact@v3
      if: failure() && steps.build.outcome == 'success'
      with:
        name: ${{ matrix.sanitizer }}-artifacts
        path: ./out/artifacts
