| name: Fuzz lou_translateString |
| |
| on: |
| workflow_dispatch: |
| schedule: |
| - cron: "0 4 * * 1" |
| |
| permissions: # added using https://github.com/step-security/secure-workflows |
| contents: read |
| |
| jobs: |
| build: |
| name: Build with ${{ matrix.ucs }} |
| # Do not run this job on any forked repos |
| if: github.repository == 'liblouis/liblouis' |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| ucs: [ucs2] |
| # ucs4 |
| steps: |
| - name: Harden Runner |
| uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 |
| with: |
| egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs |
| |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 |
| - name: Install dependencies |
| run: sudo apt-get update -qq && sudo apt-get install -y libyaml-dev texinfo texlive clang llvm |
| - name: Autogen |
| run: ./autogen.sh |
| - name: Configure |
| run: CC=clang CXX=clang++ |
| CFLAGS="-fsanitize=address,undefined -fstack-protector-strong -g -Og -fno-omit-frame-pointer" |
| CXXFLAGS="-fsanitize=address,undefined -fstack-protector-strong -g -Og -fno-omit-frame-pointer" |
| LDFLAGS="-fsanitize=address,undefined -lubsan" |
| ./configure --with-fuzzer |
| if: matrix.ucs == 'ucs2' |
| - name: Configure with ucs4 |
| run: CC=clang CXX=clang++ |
| CFLAGS="-fsanitize=address,undefined -fstack-protector-strong -g -Og -fno-omit-frame-pointer" |
| CXXFLAGS="-fsanitize=address,undefined -fstack-protector-strong -g -Og -fno-omit-frame-pointer" |
| LDFLAGS="-fsanitize=address,undefined -lubsan" |
| ./configure --with-fuzzer --enable-ucs4 |
| if: matrix.ucs == 'ucs4' |
| - name: Compile project |
| run: make -j |
| - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 |
| with: |
| path: /home/runner/work/liblouis/liblouis |
| key: build-${{ matrix.ucs }}-${{ github.sha }} |
| |
| run: |
| name: Run with ${{ matrix.ucs }} for ${{ matrix.table }} |
| needs: build |
| runs-on: ubuntu-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| ucs: [ucs2] |
| # ucs4 |
| table: |
| - afr-za-g1.ctb |
| - afr-za-g2.ctb |
| - akk.utb |
| - akk-borger.utb |
| - ancient-languages-borger.utb |
| - ancient-languages-us.utb |
| - ar-ar-comp8.utb |
| - ar-ar-g1.utb |
| - ar-ar-g2.ctb |
| - as-in-g1.utb |
| - aw-in-g1.utb |
| - ba.utb |
| - be-in-g1.utb |
| - bel.utb |
| - bel-comp.utb |
| - bel-detailed.utb |
| - bg.ctb |
| - bg.utb |
| - bh.ctb |
| - bo.ctb |
| - boxes.ctb |
| - br-in-g1.utb |
| - ca-g1.ctb |
| - chr-us-g1.ctb |
| - ckb-g1.ctb |
| - cop-eg-comp8.utb |
| - cop.utb |
| - cs-comp8.utb |
| - cs-g1.ctb |
| - cy-cy-g1.utb |
| - cy-cy-g2.ctb |
| - cuneiform-transliterated.utb |
| - cuneiform-transliterated-compact.utb |
| - da-dk-g08_1993.ctb |
| - da-dk-g08.ctb |
| - da-dk-g16_1993.ctb |
| - da-dk-g16.ctb |
| - da-dk-g16-lit_1993.ctb |
| - da-dk-g18_1993.ctb |
| - da-dk-g18.ctb |
| - da-dk-g26_1993.ctb |
| - da-dk-g26.ctb |
| - da-dk-g26l_1993.ctb |
| - da-dk-g26-lit_1993.ctb |
| - da-dk-g26l-lit_1993.ctb |
| - da-dk-g28_1993.ctb |
| - da-dk-g28.ctb |
| - da-dk-g28l_1993.ctb |
| - de-chess.ctb |
| - de-comp6.utb |
| - de-de-comp8.ctb |
| - de-g0.utb |
| - de-g0-detailed.utb |
| - de-g1.ctb |
| - de-g1-detailed.ctb |
| - de-g2.ctb |
| - de-g2-detailed.ctb |
| - dra.ctb |
| - el.ctb |
| - en_CA.ctb |
| - en-chess.ctb |
| - en-gb-comp8.ctb |
| - en-gb-g1.utb |
| - en-GB-g2.ctb |
| - en-in-g1.ctb |
| - en-nabcc.utb |
| - en-ueb-g1.ctb |
| - en-ueb-g2.ctb |
| - en-ueb-math.ctb |
| - en-us-comp6.ctb |
| - en-us-comp8.ctb |
| - en-us-comp8-ext.utb |
| - en-us-g1.ctb |
| - en-us-g2.ctb |
| - en-us-interline.ctb |
| - en-us-mathtext.ctb |
| - eo-g1.ctb |
| - eo-g1-x-system.ctb |
| - Es-Es-G0.utb |
| - es-g1.ctb |
| - es-g2.ctb |
| - et.ctb |
| - et-g0.utb |
| - ethio-g1.ctb |
| - fa-ir-comp8.ctb |
| - fa-ir-g1.utb |
| - fi-fi-8dot.ctb |
| - fi.utb |
| - fil-g2.ctb |
| - fr-bfu-comp6.utb |
| - fr-bfu-comp8.utb |
| - fr-bfu-g2.ctb |
| - ga-g1.utb |
| - ga-g2.ctb |
| - gd.ctb |
| - gon.ctb |
| - grc-international-en.utb |
| - grc-international-en-composed.utb |
| - grc-international-es.utb |
| - gu-in-g1.utb |
| - haw-us-g1.ctb |
| - hbo-cantillated.utb |
| - hbo-slim.utb |
| - hbo.utb |
| - he-IL.utb |
| - he-IL-comp8.utb |
| - hi-in-g1.utb |
| - hr-comp8.utb |
| - hr-g1.ctb |
| - hu-hu-comp8.ctb |
| - hu-hu-g1.ctb |
| - hu-hu-g2.ctb |
| - hy.ctb |
| - IPA.utb |
| - is.ctb |
| - it-it-comp6.utb |
| - it-it-comp8.utb |
| - iu-ca-g1.ctb |
| - ja-kantenji-ucs2.utb |
| - ja-kantenji.utb |
| - ja-rokutenkanji.utb |
| - ka.utb |
| - ka-in-g1.utb |
| - kh-in-g1.utb |
| - kk.utb |
| - km-g1.utb |
| - ko-2006-g1.ctb |
| - ko-2006-g2.ctb |
| - ko-g1.ctb |
| - ko-g2.ctb |
| - kok.ctb |
| - kru.ctb |
| - ks-in-g1.utb |
| - lg-ug-g1.utb |
| - lo-g1.utb |
| - lt.ctb |
| - lt-6dot.utb |
| - lt-8dot.utb |
| - Lv-Lv-g1.utb |
| - mao-nz-g1.ctb |
| - ml-in-g1.utb |
| - mn-in-g1.utb |
| - mn-MN-g1.utb |
| - mn-MN-g2.ctb |
| - mr-in-g1.utb |
| - ms-my-g2.ctb |
| - mt.ctb |
| - mun.ctb |
| - mwr.ctb |
| - my-g1.utb |
| - my-g2.ctb |
| - ne.ctb |
| - nl-comp8.utb |
| - nl-NL-g0.utb |
| - no-no-8dot-fallback-6dot-g0.utb |
| - no-no-8dot.utb |
| - no-no-comp8.ctb |
| - no-no-g0.utb |
| - no-no-g1.ctb |
| - no-no-g2.ctb |
| - no-no-g3.ctb |
| - no-no-generic.ctb |
| - np-in-g1.utb |
| - nso-za-g1.utb |
| - nso-za-g2.ctb |
| - ny-mw.utb |
| - or-in-g1.utb |
| - pi.ctb |
| - pl-pl-comp8.ctb |
| - Pl-Pl-g1.utb |
| - pt-comp6.utb |
| - pt-pt-comp8.ctb |
| - pt-pt-g1.utb |
| - pt-pt-g2.ctb |
| - pu-in-g1.utb |
| - ro.ctb |
| - ro-g0.utb |
| - ru-comp6.utb |
| - ru-comp8.utb |
| - ru-litbrl.ctb |
| - ru-litbrl-detailed.utb |
| - ru-ru-g1.ctb |
| - rw-rw-g1.utb |
| - sa-in-g1.utb |
| - sah.utb |
| - se-se.ctb |
| - si-in-g1.utb |
| - sin.utb |
| - sk-g1.ctb |
| - sk-sk-g1.utb |
| - sk-sk.utb |
| - sl-si-comp8.ctb |
| - sl-si-g1.utb |
| - sot-za-g1.ctb |
| - sot-za-g2.ctb |
| - sr-g1.ctb |
| - sr-Cyrl.ctb |
| - sv-1989.ctb |
| - sv-1996.ctb |
| - sv-g0.utb |
| - sv-g1.ctb |
| - sv-g2.ctb |
| - sw-ke-g1-2.ctb |
| - sw-ke-g1-3.ctb |
| - sw-ke-g1-4.ctb |
| - sw-ke-g1-5.ctb |
| - sw-ke-g1.utb |
| - sw-ke-g2.ctb |
| - syc.utb |
| - ta.ctb |
| - ta-ta-g1.ctb |
| - te-in-g1.utb |
| - th-g0.utb |
| - th-g1.utb |
| - th-g2.ctb |
| - th-comp8-backward.utb |
| - tr.ctb |
| - tr-g1.ctb |
| - tr-g2.ctb |
| - tsn-za-g1.ctb |
| - tsn-za-g2.ctb |
| - tt.utb |
| - uga.utb |
| - uk.utb |
| - uk-comp.utb |
| - uk-detailed.utb |
| - unicode-braille.utb |
| - ur-pk-g1.utb |
| - ur-pk-g2.ctb |
| - uz-g1.utb |
| - ve-za-g1.utb |
| - ve-za-g2.ctb |
| - vi-cb8.utb |
| - vi-saigon-g1.ctb |
| - vi-vn-g0.utb |
| - vi-vn-g1.ctb |
| - vi-vn-g2.ctb |
| - xh-za-g1.utb |
| - xh-za-g2.ctb |
| - yi.utb |
| - zh-chn.ctb |
| - zhcn-cbs.ctb |
| - zhcn-g1.ctb |
| - zhcn-g2.ctb |
| - zh-hk.ctb |
| - zh-tw.ctb |
| - zu-za-g1.utb |
| - zu-za-g2.ctb |
| steps: |
| - name: Harden Runner |
| uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 # v2.13.0 |
| with: |
| egress-policy: audit # TODO: change to 'egress-policy: block' after couple of runs |
| |
| - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 |
| with: |
| path: /home/runner/work/liblouis/liblouis |
| key: build-${{ matrix.ucs }}-${{ github.sha }} |
| - name: Fuzz function lou_translateString() |
| run: mkdir tests/fuzzing/CORPUS ; FUZZ_TABLE=tables/${{ matrix.table }} tests/fuzzing/fuzz_translate -seed=1234 -runs=100000 -max_len=10000 tests/fuzzing/CORPUS |
| - name: Store the crash POC |
| if: ${{ failure() }} |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: crash-${{ matrix.ucs }}-${{ matrix.table }}.1 |
| path: crash-* timeout-* |
| - name: Fuzz function lou_translateString() with language-specific input |
| run: cp tables/${{ matrix.table }} tests/fuzzing/CORPUS/ ; FUZZ_TABLE=tables/${{ matrix.table }} tests/fuzzing/fuzz_translate -seed=1234 -runs=30000 -max_len=10000 tests/fuzzing/CORPUS |
| - name: Store the crash POC |
| if: ${{ failure() }} |
| uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 |
| with: |
| name: crash-${{ matrix.ucs }}-${{ matrix.table }}.2 |
| path: crash-* timeout-* |