Permalink
Comparing changes
Choose two branches to see what’s changed or to start a new pull request.
If you need to, you can also .
Open a pull request
Create a new pull request by comparing changes across two branches. If you need to, you can also .
9
contributors
Commits on Feb 10, 2020
Commits on Mar 02, 2020
Adds support for the moov.udta.chpl box.
Commits on Mar 04, 2020
Fix a crash when parsing malformed ogg
Commits on Mar 06, 2020
Commits on Mar 07, 2020
Fix a crash when parsing malformed asf files
MP4: Add support for chapters
Commits on Mar 08, 2020
- Guard against an infinite loop - Wrap a call into a try...catch, since there are a lot of manual offset fiddling involving struct.unpack in the child functions, resulting in a lot of different ways to trigger a struct.error
Improve a bit the robustness of asf parsing
Add a check for ogg vorbis packet length
Commits on Mar 17, 2020
Replace an assert with a raise
Commits on Mar 18, 2020
Commits on Mar 19, 2020
Gracefully handle a division by zero
Commits on Mar 21, 2020
Basic fuzzing integration with python-afl
This resulted in a zero fps which then resulted in a division by zero later on.
Handle more expected errors and add some more operations
We allow it in other places and I can't find anything that would not allow this, so just treat it as every other page and add some tests. This fixes some errors in case we parsed an empty page and tried to write it back out.
Commits on Mar 22, 2020
Commits on Apr 03, 2020
Fix a crash in id3 frames handling
* raise overflow in case of inf/nan * handle overflow in parsing code * raise on negative sample rate Fixes #455
Commits on Apr 04, 2020
aiff: handle overflow in read_float()
Instead of using pycodestyle/pyflakes directly
At least the obvious things
Either inline things or move them to _util.py
lots of errors still
Commits on Apr 05, 2020
Commits on Apr 09, 2020
Commits on Apr 19, 2020
Sorry this is such a minor PR. Love the project!
Minor typo in comments
Commits on May 02, 2020
Commits on May 03, 2020
wavpack: add support for wavpack DSD
Related to issue #207
* fix wrong abstract attribute reference
* fix reference to root ('RIFF') chuck
Should be Little-Endian, was Big-Endian.
This allows to safely perform multiple chunk insert / delete / resize operations on loaded RIFF files. See #392
mp4: handle DecoderSpecificInfo with wrong instance size
Commits on May 04, 2020
Full RIFF/WAVE support with ID3 tags
Commits on May 05, 2020
wavpack: add bits_per_sample
Commits on Jun 07, 2020
Update the AIFF and RIFF implementations to use the new IFF base classes.
Commits on Jun 08, 2020
Commits on Jun 13, 2020
Commits on Jun 14, 2020
Fix typos in docstring
Commits on Jun 16, 2020
Extract common IFF code to separate module.
While this is not in the standard it is supported by existing players and according to the spec unknown chunks in the files must be ignored, so it should not break spec compliant tools not supporting ID3.
Commits on Jul 11, 2020
Add support for DSDIFF with ID3 tagging
Unified
Split
Showing
with
3,190 additions
and 1,683 deletions.
- +1 −0 .gitignore
- +3 −4 .travis.yml
- +1 −0 MANIFEST.in
- +39 −0 NEWS
- +1 −1 README.rst
- +2 −2 azure-pipelines.yml
- +0 −12 docs/api/asf.rst
- +11 −0 docs/api/dsdiff.rst
- +2 −0 docs/api/index.rst
- +11 −0 docs/api/wave.rst
- +1 −0 docs/conf.py
- +21 −0 docs/extra.css
- +106 −0 docs/images/logo-small.svg
- +2 −0 fuzzing/.gitignore
- +15 −0 fuzzing/README.rst
- +8 −0 fuzzing/check_crashes.sh
- +144 −0 fuzzing/fuzztools.py
- +58 −0 fuzzing/poetry.lock
- +16 −0 fuzzing/pyproject.toml
- +23 −0 fuzzing/run.sh
- +24 −0 fuzzing/sut.py
- +1 −1 mutagen/__init__.py
- +0 −94 mutagen/_compat.py
- +6 −5 mutagen/_file.py
- +387 −0 mutagen/_iff.py
- +70 −0 mutagen/_riff.py
- +1 −7 mutagen/_senf/__init__.py
- +104 −0 mutagen/_senf/__init__.pyi
- +1 −1 mutagen/_senf/_argv.py
- +1 −1 mutagen/_senf/_environ.py
- +25 −66 mutagen/_senf/_fsnative.py
- +195 −196 mutagen/_senf/_winapi.py
- 0 mutagen/_senf/py.typed
- +2 −2 mutagen/_tools/_util.py
- +1 −2 mutagen/_tools/mid3cp.py
- +1 −2 mutagen/_tools/mid3iconv.py
- +16 −23 mutagen/_tools/mid3v2.py
- +1 −2 mutagen/_tools/mutagen_inspect.py
- +39 −35 mutagen/_util.py
- +11 −32 mutagen/_vorbis.py
- +9 −7 mutagen/aac.py
- +1 −1 mutagen/ac3.py
- +52 −282 mutagen/aiff.py
- +23 −66 mutagen/apev2.py
- +4 −10 mutagen/asf/__init__.py
- +13 −24 mutagen/asf/_attrs.py
- +17 −10 mutagen/asf/_objects.py
- +267 −0 mutagen/dsdiff.py
- +4 −4 mutagen/dsf.py
- +6 −11 mutagen/easyid3.py
- +6 −13 mutagen/easymp4.py
- +11 −13 mutagen/flac.py
- +1 −1 mutagen/id3/__init__.py
- +0 −2 mutagen/id3/_file.py
- +15 −27 mutagen/id3/_frames.py
- +5 −5 mutagen/id3/_id3v1.py
- +26 −35 mutagen/id3/_specs.py
- +21 −29 mutagen/id3/_tags.py
- +3 −13 mutagen/id3/_util.py
- +1 −2 mutagen/monkeysaudio.py
- +4 −5 mutagen/mp3/__init__.py
- +4 −4 mutagen/mp3/_util.py
- +167 −23 mutagen/mp4/__init__.py
- +15 −11 mutagen/mp4/_as_entry.py
- +2 −7 mutagen/mp4/_atom.py
- +12 −5 mutagen/musepack.py
- +16 −14 mutagen/ogg.py
- +3 −4 mutagen/oggflac.py
- +1 −1 mutagen/oggopus.py
- +13 −5 mutagen/oggtheora.py
- +8 −1 mutagen/oggvorbis.py
- +1 −2 mutagen/optimfrog.py
- +2 −3 mutagen/smf.py
- +1 −1 mutagen/tak.py
- +1 −2 mutagen/trueaudio.py
- +210 −0 mutagen/wave.py
- +7 −0 mutagen/wavpack.py
- +11 −3 setup.cfg
- +4 −1 setup.py
- +1 −7 tests/__init__.py
- BIN tests/data/2822400-1ch-0s-silence.dff
- BIN tests/data/5644800-2ch-s01-silence-dst.dff
- BIN tests/data/5644800-2ch-s01-silence.dff
- BIN tests/data/dsd.wv
- BIN tests/data/ep7.m4b
- BIN tests/data/ep9.m4b
- BIN tests/data/nero-chapters.m4b
- BIN tests/data/silence-2s-PCM-16000-08-ID3v23.wav
- BIN tests/data/silence-2s-PCM-16000-08-notags.wav
- BIN tests/data/silence-2s-PCM-44100-16-ID3v23.wav
- +34 −0 tests/quality/test_flake8.py
- +0 −39 tests/quality/test_pep8.py
- +0 −55 tests/quality/test_pyflakes.py
- +0 −45 tests/quality/util.py
- +33 −19 tests/test___init__.py
- +13 −25 tests/test__id3frames.py
- +3 −10 tests/test__id3specs.py
- +1 −18 tests/test__id3util.py
- +9 −0 tests/test__iff.py
- +145 −0 tests/test__riff.py
- +28 −31 tests/test__util.py
- +19 −26 tests/test__vorbis.py
- +38 −28 tests/test_aiff.py
- +15 −26 tests/test_apev2.py
- +18 −37 tests/test_asf.py
- +78 −0 tests/test_dsdiff.py
- +0 −5 tests/test_easyid3.py
- +5 −23 tests/test_flac.py
- +16 −16 tests/test_id3.py
- +1 −1 tests/test_m4a.py
- +25 −25 tests/test_mp3.py
- +69 −47 tests/test_mp4.py
- +5 −5 tests/test_musepack.py
- +33 −15 tests/test_ogg.py
- +4 −4 tests/test_oggflac.py
- +1 −1 tests/test_oggopus.py
- +2 −2 tests/test_oggspeex.py
- +3 −3 tests/test_oggtheora.py
- +6 −6 tests/test_oggvorbis.py
- +2 −7 tests/test_tools.py
- +2 −3 tests/test_tools_mid3iconv.py
- +2 −13 tests/test_tools_mid3v2.py
- +1 −2 tests/test_tools_moggsplit.py
- +3 −4 tests/test_tools_util.py
- +224 −0 tests/test_wave.py
- +33 −0 tests/test_wavpack.py
| @@ -9,6 +9,7 @@ coverage | ||
| .cache | ||
| *.egg-info | ||
| .coverage | ||
| *.iml | ||
| .idea | ||
| .hypothesis | ||
| .pytest_cache | ||
| @@ -35,10 +35,9 @@ install: | ||
| - if [ "$TYPE" == "osx" ]; then brew update; fi | ||
| - if [ "$TYPE" == "osx" ]; then brew unlink python@2 || true; fi | ||
| - if [ "$TYPE" == "osx" ]; then brew install python || brew upgrade python; fi | ||
| - if [ "$TYPE" == "osx" ]; then python3 -m pip install virtualenv; fi | ||
| - if [ "$TYPE" == "osx" ]; then virtualenv venv -p python3; fi | ||
| - if [ "$TYPE" == "osx" ]; then source venv/bin/activate; fi | ||
| - if [ "$TYPE" == "linux" ] || [ "$TYPE" == "osx" ]; then python -m pip install --upgrade pycodestyle pyflakes pytest hypothesis coverage codecov attrs; fi | ||
| - if [ "$TYPE" == "osx" ]; then python3 -m venv /tmp/_venv; fi | ||
| - if [ "$TYPE" == "osx" ]; then source /tmp/_venv/bin/activate; fi | ||
| - if [ "$TYPE" == "linux" ] || [ "$TYPE" == "osx" ]; then python -m pip install --upgrade flake8 pytest hypothesis coverage codecov attrs; fi | ||
| - if [ "$TYPE" == "linux" ] || [ "$PYVER" == "3.6" ]; then python -m pip install --upgrade sphinx sphinx_rtd_theme; fi | ||
|
|
||
| script: | ||
| @@ -7,6 +7,7 @@ include tests/data/* | ||
| include tests/quality/* | ||
| include tests/*.py | ||
| include man/*.1 | ||
| recursive-include mutagen *.pyi *.typed | ||
| recursive-include mutagen README.rst | ||
| recursive-include docs *.py Makefile *.rst *.png *.svg *.ico *.css | ||
| prune docs/_build | ||
| @@ -1,3 +1,42 @@ | ||
| .. _release-1.45.0: | ||
|
|
||
| 1.45.0 - 2020-07-11 | ||
| ------------------- | ||
|
|
||
| * WAVE support with ID3 tags :pr:`408` (:user:`Philipp Wolfer <phw>`, :user:`Borewit`) | ||
| * DSDIFF support with ID3 tags :pr:`473` :pr:`472` (:user:`Philipp Wolfer <phw>`) | ||
| * MP4: Add support for nero chapters :pr:`398` (:user:`Martin Weinelt <mweinelt>`) | ||
| * wavpack: add support for wavpack DSD :pr:`464` (:user:`Timothy Redaelli <drizzt>`) | ||
| * wavpack: add bits_per_sample :pr:`467` (:user:`Timothy Redaelli <drizzt>`) | ||
| * MP4: handle DecoderSpecificInfo with wrong instance size :pr:`465` | ||
| * docs: various fixes :pr:`461` (:user:`Terence Eden <edent>`), :pr:`474` (:user:`naglis`) | ||
| * tests: depend on flake8 now (instead of pycodestyle and pyflakes) | ||
| * docs: fix warnings with sphinx v3 | ||
|
|
||
| Fuzzing related: | ||
|
|
||
| * Fuzzing integration with `python-afl <https://github.com/jwilk/python-afl>`__ :pr:`449` | ||
| * Fix various unhandled error cases in ogg, asf, oggvorbis, id3 :pr:`441`, :pr:`445`, :pr:`446`, :pr:`447`, :pr:`448`, :pr:`454` (:user:`Julien Voisin <jvoisin>`) | ||
| * aac: Fix ZeroDivisionError in case frequency is unknown | ||
| * musepack: handle truncated stream header | ||
| * musepack: handle invalid sample rate index | ||
| * musepack: handle duplicate RG/SH packets | ||
| * oggtheora: handle truncated header packet | ||
| * oggtheora: fail if FRN in the header packet is zero | ||
| * oggtheora: handle empty pages in more cases | ||
| * ogg: handle empty pages in to_packets() | ||
| * aiff: handle overflow in read_float() :pr:`456` | ||
|
|
||
|
|
||
| .. _release-1.43.1: | ||
|
|
||
| 1.43.1 - 2020-07-11 | ||
| ------------------- | ||
|
|
||
| * Add pickle support for enum types :pr:`477` | ||
| * docs: fix various warnings with sphinx v3 | ||
|
|
||
|
|
||
| .. _release-1.44.0: | ||
|
|
||
| 1.44.0 - 2020-02-10 | ||
| @@ -1,4 +1,4 @@ | ||
| .. image:: https://cdn.rawgit.com/quodlibet/mutagen/master/docs/images/logo.svg | ||
| .. image:: https://raw.githubusercontent.com/quodlibet/mutagen/master/docs/images/logo.svg | ||
| :align: center | ||
| :width: 400px | ||
|
|
||
| @@ -25,12 +25,12 @@ jobs: | ||
| versionSpec: '$(python.version)' | ||
| architecture: '$(python.arch)' | ||
| - script: | | ||
| pip install pytest pytest-xdist hypothesis coverage codecov pycodestyle pyflakes | ||
| pip install pytest hypothesis coverage codecov flake8 | ||
| displayName: Install Dependencies | ||
| - script: | | ||
| python.exe -m coverage run --branch setup.py test | ||
| env: | ||
| PYTEST_ADDOPTS: '-n auto -v --junitxml=test-results.xml' | ||
| PYTEST_ADDOPTS: '-v --junitxml=test-results.xml' | ||
| PYTHONHASHSEED: '0' | ||
| displayName: Run Tests | ||
| - task: PublishTestResults@2 | ||
| @@ -25,12 +25,6 @@ ASF | ||
| :members: | ||
|
|
||
|
|
||
| .. autoclass:: mutagen.asf.ASFBoolAttribute(value) | ||
| :members: | ||
|
|
||
| :bases: `ASFBaseAttribute` | ||
|
|
||
|
|
||
| .. autoclass:: mutagen.asf.ASFGUIDAttribute(value) | ||
| :members: | ||
|
|
||
| @@ -71,9 +65,3 @@ ASF | ||
| :members: | ||
|
|
||
| :bases: `ASFBaseAttribute` | ||
|
|
||
|
|
||
| .. autoclass:: mutagen.asf.ASFUnicodeAttribute(value) | ||
| :members: | ||
|
|
||
| :bases: `ASFBaseAttribute` | ||
| @@ -0,0 +1,11 @@ | ||
| DSDIFF | ||
| ====== | ||
|
|
||
| .. automodule:: mutagen.dsdiff | ||
|
|
||
| .. autoclass:: mutagen.dsdiff.DSDIFF | ||
| :show-inheritance: | ||
| :members: | ||
|
|
||
| .. autoclass:: mutagen.dsdiff.DSDIFFInfo | ||
| :members: |
| @@ -9,6 +9,7 @@ API Reference | ||
| aiff | ||
| ape | ||
| asf | ||
| dsdiff | ||
| dsf | ||
| flac | ||
| id3 | ||
| @@ -27,4 +28,5 @@ API Reference | ||
| tak | ||
| trueaudio | ||
| vcomment | ||
| wave | ||
| wavpack | ||
| @@ -0,0 +1,11 @@ | ||
| WAVE | ||
| ---- | ||
|
|
||
| .. automodule:: mutagen.wave | ||
|
|
||
| .. autoclass:: mutagen.wave.WAVE(filename) | ||
| :show-inheritance: | ||
| :members: | ||
|
|
||
| .. autoclass:: mutagen.wave.WaveStreamInfo() | ||
| :members: |
| @@ -51,6 +51,7 @@ | ||
|
|
||
| html_static_path = [ | ||
| "extra.css", | ||
| "images/logo-small.svg", | ||
| ] | ||
|
|
||
| suppress_warnings = ["image.nonlocal_uri"] | ||
| @@ -34,3 +34,24 @@ footer hr { | ||
| .versionmodified { | ||
| color: #008000; | ||
| } | ||
|
|
||
| a.icon-home, a.icon-home:hover { | ||
| display: inline-block; | ||
| padding: 4px 4px 4px 23px; | ||
| background: transparent url(logo-small.svg) center left no-repeat; | ||
| background-size: 1.5em; | ||
| margin-top: 0.2em; | ||
| margin-bottom: 1em; | ||
| } | ||
|
|
||
|
|
||
| .fa-home::before, .icon-home::before { | ||
| content: ""; | ||
| } | ||
|
|
||
| .wy-nav-top a { | ||
| margin: -2em; | ||
| background: transparent url(logo-small.svg) center left no-repeat; | ||
| background-size: 1.5em; | ||
| padding: 4px 4px 4px 26px; | ||
| } | ||
| @@ -0,0 +1,106 @@ | ||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | ||
|
|
||
| <!-- The font the Mutagen logo uses is Cantarell. --> | ||
|
|
||
| <svg | ||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| xmlns:cc="http://creativecommons.org/ns#" | ||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| xmlns:svg="http://www.w3.org/2000/svg" | ||
| xmlns="http://www.w3.org/2000/svg" | ||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| width="190" | ||
| height="190" | ||
| version="1.1" | ||
| id="svg6" | ||
| sodipodi:docname="logo-small.svg" | ||
| inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> | ||
| <metadata | ||
| id="metadata12"> | ||
| <rdf:RDF> | ||
| <cc:Work | ||
| rdf:about=""> | ||
| <dc:format>image/svg+xml</dc:format> | ||
| <dc:type | ||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| <dc:title /> | ||
| </cc:Work> | ||
| </rdf:RDF> | ||
| </metadata> | ||
| <defs | ||
| id="defs10"> | ||
| <filter | ||
| style="color-interpolation-filters:sRGB;" | ||
| inkscape:label="Blur" | ||
| id="filter834"> | ||
| <feGaussianBlur | ||
| stdDeviation="2 2" | ||
| result="blur" | ||
| id="feGaussianBlur832" /> | ||
| </filter> | ||
| <filter | ||
| style="color-interpolation-filters:sRGB;" | ||
| inkscape:label="Blur" | ||
| id="filter838"> | ||
| <feGaussianBlur | ||
| stdDeviation="2 2" | ||
| result="blur" | ||
| id="feGaussianBlur836" /> | ||
| </filter> | ||
| </defs> | ||
| <sodipodi:namedview | ||
| pagecolor="#ffffff" | ||
| bordercolor="#666666" | ||
| borderopacity="1" | ||
| objecttolerance="10" | ||
| gridtolerance="10" | ||
| guidetolerance="10" | ||
| inkscape:pageopacity="0" | ||
| inkscape:pageshadow="2" | ||
| inkscape:window-width="960" | ||
| inkscape:window-height="966" | ||
| id="namedview8" | ||
| showgrid="false" | ||
| fit-margin-top="0" | ||
| fit-margin-left="0" | ||
| fit-margin-right="0" | ||
| fit-margin-bottom="0" | ||
| showguides="true" | ||
| inkscape:guide-bbox="true" | ||
| inkscape:zoom="1.3444188" | ||
| inkscape:cx="147.48412" | ||
| inkscape:cy="173.85345" | ||
| inkscape:window-x="960" | ||
| inkscape:window-y="25" | ||
| inkscape:window-maximized="0" | ||
| inkscape:current-layer="svg6" | ||
| inkscape:pagecheckerboard="true"> | ||
| <sodipodi:guide | ||
| position="213.47515,-81.075927" | ||
| orientation="0,1" | ||
| id="guide822" | ||
| inkscape:locked="false" /> | ||
| </sodipodi:namedview> | ||
| <path | ||
| style="fill:#4d4d4d" | ||
| d="M 45.039062,22.259766 C 39.75788,23.577296 31.660556,19.896949 28.751953,26.527344 21.953032,58.712608 15.709472,91.063738 9.1230469,123.3125 c 9.1458331,0 18.2916671,0 27.4375001,0 2.938345,-11.7699 4.062592,-25.169049 7.820312,-35.951172 7.03184,2.475568 14.552006,-0.295131 21.753907,0.552734 4.676967,-0.11751 9.472113,0.99032 14.070312,-0.265624 5.076186,26.783112 10.791917,53.471662 16.048828,80.232422 6.191874,-1.62246 15.078574,2.34748 19.095704,-4.61328 3.99645,-13.9518 8.36382,-27.87509 12.87891,-41.70117 4.91814,15.32221 9.83489,30.64486 14.7539,45.96679 6.233,-0.11209 15.95779,1.97314 19.09375,-5.26367 4.49972,-27.5864 10.93883,-55.05228 16.18387,-82.59082 -0.35339,-4.539593 6.47927,-14.961899 -1.82645,-12.99121 -7.6569,0 -15.3138,0 -22.9707,0 -2.71,12.291858 -4.638,24.748564 -7.61719,36.98242 -7.71733,-2.09846 -15.74888,0.51314 -23.58398,-0.75976 -4.01633,-0.0296 -8.15634,0.9457 -12.08594,-0.20899 C 104.71432,75.839114 99.211435,48.985479 93.732422,22.126953 87.543618,23.730398 78.656246,19.777579 74.650391,26.736328 70.574566,40.655648 66.349342,54.60673 61.773438,68.398438 56.789871,52.885366 51.805084,37.372687 46.822266,21.859375 l -0.975707,0.21908 z m 84.222658,43.041015 c -3.84783,-0.240285 -10.03841,0.221255 -9.8711,5.496094 -1.71128,4.988658 -7.28159,11.985507 -1.53515,16.462891 4.77164,1.84118 10.00186,-0.105845 14.89258,1.285156 4.9678,0.558923 10.51124,-4.62372 7.18359,-9.503906 -1.96774,-5.432051 -2.81535,-14.236802 -10.66992,-13.740235 z M 64.214844,102.93164 c -4.783995,1.30833 -12.207084,-2.29189 -15.027344,2.86914 -1.062009,4.47285 2.821754,8.15469 3.125,12.53906 1.878077,5.75227 8.682769,8.19894 14.003906,5.6543 6.512115,-2.68469 5.798711,-11.13623 8.644532,-16.36719 -0.589584,-4.81893 -7.191283,-4.56397 -10.746094,-4.69531 z" | ||
| id="m-squiggle-3" | ||
| inkscape:connector-curvature="0" /> | ||
| <path | ||
| style="fill:#4d4d4d" | ||
| d="m 174.74609,80.345703 c -6.7488,0.97785 -4.58081,9.388868 -6.61718,13.849609 0.54417,4.692792 -5.32703,11.188928 -0.0937,14.820308 10.43203,4.19476 24.73367,-5.32536 21.66015,-17.044917 -1.49827,-6.700182 -8.06185,-11.880488 -14.94922,-11.625 z M 13.958984,80.511719 C 1.3751767,80.06446 -5.0776802,98.912463 5.2949219,106.18164 c 4.0662595,4.19648 14.0059741,5.06674 14.9355471,-2.33203 1.451064,-7.796585 3.130582,-15.559433 4.666015,-23.343751 -3.64581,0.0019 -7.291778,-0.02954 -10.9375,0.0059 z m 23.742188,1.59375 C 35.865199,91.235662 34.04107,100.36909 32.207031,109.5 c 19.783203,0 39.566407,0 59.34961,0 -1.918672,-9.666527 -3.838442,-19.332838 -5.753907,-29 -15.925781,0 -31.851562,0 -47.777343,0 l -0.197951,0.980212 z m 61.654297,0.783203 c 1.759751,8.870446 3.522161,17.740368 5.279301,26.611328 15.78125,0 31.5625,0 47.34375,0 1.93845,-9.666607 3.87472,-19.333651 5.81445,-29 -19.63737,0 -39.27474,0 -58.912111,0 0.158203,0.796224 0.316407,1.592448 0.47461,2.388672 z" | ||
| id="redline-7" | ||
| inkscape:connector-curvature="0" /> | ||
| <path | ||
| id="redline" | ||
| style="fill:#999999" | ||
| d="M 14.46875,86.5 C 9.90612,86.5 6,90.4374 6,95 c 0,4.44668 3.712975,8.30694 8.125,8.5 l 3.4375,-17 z m 28.46875,0 -3.40625,17 H 84.25 l -3.375,-17 z m 63.25,0 3.375,17 h 37.5 l 3.40625,-17 z m 69.6875,0 -3.4375,17 h 3.09375 C 180.09388,103.5 184,99.5626 184,95 c 0,-4.4466 -3.71298,-8.3069 -8.125,-8.5 z" | ||
| inkscape:connector-curvature="0" /> | ||
| <path | ||
| id="m-squiggle" | ||
| style="fill:#ececec" | ||
| d="m 34.328125,28.5625 -17.875,88.75 h 15.21875 l 9.5625,-47.8125 4.59375,12.5625 h 14.03125 l -17.1875,-53.5 z m 46.3125,0 -16.8125,53.5 h 14.15625 L 82.578125,69.5 101.07813,161.4375 h 8.28125 l 16.4375,-52.375 h -14.21875 l -4.15625,11.4375 -0.625,-3.1875 h 0.25 l -18.125005,-88.75 z m 44.656255,42.96875 -3.84375,10.53125 h 13.31249 l -3.84375,-10.53125 z m 33.06249,1.15625 -9.59375,47.8125 -4.15625,-11.4375 h -14.09375 l 16.8125,52.375 h 8.34375 l 17.875,-88.75 z m -102.718745,36.375 3.4375,9.40625 h 5.625 l 3.4375,-9.40625 z" | ||
| inkscape:connector-curvature="0" /> | ||
| </svg> |
| @@ -0,0 +1,2 @@ | ||
| _results | ||
| _examples* |
| @@ -0,0 +1,15 @@ | ||
| Fuzzing | ||
| ======= | ||
|
|
||
| Uses `python-afl <https://github.com/jwilk/python-afl>`__ and `afl | ||
| <https://lcamtuf.coredump.cx/afl/>`__ | ||
|
|
||
| * Install afl, for example ``sudo apt install afl++`` on Debian/Ubuntu | ||
| * ``poetry install`` | ||
| * ``poetry shell`` | ||
| * Add some example files into ``_examples`` | ||
| * ``./run.sh`` will start multiple afl-fuzz instances | ||
| * Run ``watch -n 1 -c afl-whatsup -s _results`` to see a summary | ||
| of all active runners | ||
| * CTRL+C to stop | ||
| * Run ``./check_crashes.sh`` to get a summary of the errors found |
| @@ -0,0 +1,8 @@ | ||
| #!/bin/bash | ||
|
|
||
| set -e | ||
|
|
||
| export PYTHONPATH="$(pwd)/.." | ||
| RESULTS=_results | ||
|
|
||
| python fuzztools.py "$RESULTS" |
Oops, something went wrong.