Skip to content
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 .
base repository: quodlibet/mutagen
Choose a Base Repository
quodlibet/mutagen
24Naman/mutagen
B-Rich/mutagen
Borewit/mutagen
Dark-Matter7232/mutagen
Gabrielcarvfer/mutagen
Holzhaus/mutagen
HongliangZang/mutagen
Ikke/mutagen
MJuddBooth/mutagen
Marchen/mutagen
MaxUdovenko/mutagen
MediaKraken-Dependancies/mutagen
ProjectRecommend/mutagen
Recorichardretardo/mutagen
Reuf12/mutagen-1
RichSr40/mutagen
Sophist-UK/picard_mutagen
TatwiraT/mutagen
Teora/mutagen
TomFryers/mutagen
afcarl/mutagen
akerbis/mutagen
alexliew/mutagen
antlarr/mutagen
anubhav-narayan/mutagen
bamboo321/mutagen
brokkr/mutagen
bugatsinho/mutagen
butihinda/mutagen
cesarecorrea94/mutagen
chucklebot/mutagen
citrin/mutagen
csitko/mutagen
cushy007/mutagen
deng47/mutagen
docbobo/mutagen
donhbryan/mutagen
donovan68/mutagen
drdunks/mutagen
drizzt/mutagen
drone1/mutagen
edent/mutagen
ehermand/mutagen
elbeardmorez/mutagen
erdoukki/mutagen
ethanfurman/mutagen
frestr/mutagen
gaybro8777/mutagen
gdelfresno/mutagen
gergesh/mutagen
ghadesi/mutagen
gmyers18/mutagen
halaei/mutagen
happy-forks/mutagen
hubitor/mutagen
iloveican/mutagen
jack9950/mutagen
jbcurtin/mutagen
johnnrain/mutagen
jonntd/mutagen
justin66/mutagen
kendricktan/mutagen
ksato9700/mutagen
kuonanhong/mutagen
lavax/mutagen
lazka/mutagen
levone/mutagen
maphew/mutagen
mars-trueplus/mutagen
maybeRainH/mutagen
mike-matera/mutagen
modimanz/mutagen
musistudio/mutagen
mweinelt/mutagen
mzaman07/mutagen
naglis/mutagen
nchammas/mutagen
oddomatik/mutagen
oscarg933/mutagen
otherjon/mutagen
peppy0510/mutagen
phw/mutagen
point-source/mutagen
pranavg189/mutagen
prokosna/mutagen
samuelnilsson/mutagen
serrasqueiro/mutagen
shikasta-net/mutagen
svetlov97/mutagen
timgates42/mutagen
ttimer/mutagen
uguraba/mutagen
vault-the/mutagen
xjbclz/mutagen
zcm/mutagen
zheaton/mutagen
Nothing to show
base: release-1.44.0
head repository: quodlibet/mutagen
Choose a Head Repository
quodlibet/mutagen
24Naman/mutagen
B-Rich/mutagen
Borewit/mutagen
Dark-Matter7232/mutagen
Gabrielcarvfer/mutagen
Holzhaus/mutagen
HongliangZang/mutagen
Ikke/mutagen
MJuddBooth/mutagen
Marchen/mutagen
MaxUdovenko/mutagen
MediaKraken-Dependancies/mutagen
ProjectRecommend/mutagen
Recorichardretardo/mutagen
Reuf12/mutagen-1
RichSr40/mutagen
Sophist-UK/picard_mutagen
TatwiraT/mutagen
Teora/mutagen
TomFryers/mutagen
afcarl/mutagen
akerbis/mutagen
alexliew/mutagen
antlarr/mutagen
anubhav-narayan/mutagen
bamboo321/mutagen
brokkr/mutagen
bugatsinho/mutagen
butihinda/mutagen
cesarecorrea94/mutagen
chucklebot/mutagen
citrin/mutagen
csitko/mutagen
cushy007/mutagen
deng47/mutagen
docbobo/mutagen
donhbryan/mutagen
donovan68/mutagen
drdunks/mutagen
drizzt/mutagen
drone1/mutagen
edent/mutagen
ehermand/mutagen
elbeardmorez/mutagen
erdoukki/mutagen
ethanfurman/mutagen
frestr/mutagen
gaybro8777/mutagen
gdelfresno/mutagen
gergesh/mutagen
ghadesi/mutagen
gmyers18/mutagen
halaei/mutagen
happy-forks/mutagen
hubitor/mutagen
iloveican/mutagen
jack9950/mutagen
jbcurtin/mutagen
johnnrain/mutagen
jonntd/mutagen
justin66/mutagen
kendricktan/mutagen
ksato9700/mutagen
kuonanhong/mutagen
lavax/mutagen
lazka/mutagen
levone/mutagen
maphew/mutagen
mars-trueplus/mutagen
maybeRainH/mutagen
mike-matera/mutagen
modimanz/mutagen
musistudio/mutagen
mweinelt/mutagen
mzaman07/mutagen
naglis/mutagen
nchammas/mutagen
oddomatik/mutagen
oscarg933/mutagen
otherjon/mutagen
peppy0510/mutagen
phw/mutagen
point-source/mutagen
pranavg189/mutagen
prokosna/mutagen
samuelnilsson/mutagen
serrasqueiro/mutagen
shikasta-net/mutagen
svetlov97/mutagen
timgates42/mutagen
ttimer/mutagen
uguraba/mutagen
vault-the/mutagen
xjbclz/mutagen
zcm/mutagen
zheaton/mutagen
Nothing to show
compare: release-1.45.0
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
Fix
Gracefully handle a division by zero
Commits on Mar 21, 2020
See #443
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
* 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
As seen in #444 some files seem to contain DecoderSpecificInfo blocks
with a size field smaller than the actual content size. It's unclear
why, but we can just assume the content size wins in this case and
continue parsing.

Fixes #444
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
Showing with 3,190 additions and 1,683 deletions.
  1. +1 −0 .gitignore
  2. +3 −4 .travis.yml
  3. +1 −0 MANIFEST.in
  4. +39 −0 NEWS
  5. +1 −1 README.rst
  6. +2 −2 azure-pipelines.yml
  7. +0 −12 docs/api/asf.rst
  8. +11 −0 docs/api/dsdiff.rst
  9. +2 −0 docs/api/index.rst
  10. +11 −0 docs/api/wave.rst
  11. +1 −0 docs/conf.py
  12. +21 −0 docs/extra.css
  13. +106 −0 docs/images/logo-small.svg
  14. +2 −0 fuzzing/.gitignore
  15. +15 −0 fuzzing/README.rst
  16. +8 −0 fuzzing/check_crashes.sh
  17. +144 −0 fuzzing/fuzztools.py
  18. +58 −0 fuzzing/poetry.lock
  19. +16 −0 fuzzing/pyproject.toml
  20. +23 −0 fuzzing/run.sh
  21. +24 −0 fuzzing/sut.py
  22. +1 −1 mutagen/__init__.py
  23. +0 −94 mutagen/_compat.py
  24. +6 −5 mutagen/_file.py
  25. +387 −0 mutagen/_iff.py
  26. +70 −0 mutagen/_riff.py
  27. +1 −7 mutagen/_senf/__init__.py
  28. +104 −0 mutagen/_senf/__init__.pyi
  29. +1 −1 mutagen/_senf/_argv.py
  30. +1 −1 mutagen/_senf/_environ.py
  31. +25 −66 mutagen/_senf/_fsnative.py
  32. +195 −196 mutagen/_senf/_winapi.py
  33. 0 mutagen/_senf/py.typed
  34. +2 −2 mutagen/_tools/_util.py
  35. +1 −2 mutagen/_tools/mid3cp.py
  36. +1 −2 mutagen/_tools/mid3iconv.py
  37. +16 −23 mutagen/_tools/mid3v2.py
  38. +1 −2 mutagen/_tools/mutagen_inspect.py
  39. +39 −35 mutagen/_util.py
  40. +11 −32 mutagen/_vorbis.py
  41. +9 −7 mutagen/aac.py
  42. +1 −1 mutagen/ac3.py
  43. +52 −282 mutagen/aiff.py
  44. +23 −66 mutagen/apev2.py
  45. +4 −10 mutagen/asf/__init__.py
  46. +13 −24 mutagen/asf/_attrs.py
  47. +17 −10 mutagen/asf/_objects.py
  48. +267 −0 mutagen/dsdiff.py
  49. +4 −4 mutagen/dsf.py
  50. +6 −11 mutagen/easyid3.py
  51. +6 −13 mutagen/easymp4.py
  52. +11 −13 mutagen/flac.py
  53. +1 −1 mutagen/id3/__init__.py
  54. +0 −2 mutagen/id3/_file.py
  55. +15 −27 mutagen/id3/_frames.py
  56. +5 −5 mutagen/id3/_id3v1.py
  57. +26 −35 mutagen/id3/_specs.py
  58. +21 −29 mutagen/id3/_tags.py
  59. +3 −13 mutagen/id3/_util.py
  60. +1 −2 mutagen/monkeysaudio.py
  61. +4 −5 mutagen/mp3/__init__.py
  62. +4 −4 mutagen/mp3/_util.py
  63. +167 −23 mutagen/mp4/__init__.py
  64. +15 −11 mutagen/mp4/_as_entry.py
  65. +2 −7 mutagen/mp4/_atom.py
  66. +12 −5 mutagen/musepack.py
  67. +16 −14 mutagen/ogg.py
  68. +3 −4 mutagen/oggflac.py
  69. +1 −1 mutagen/oggopus.py
  70. +13 −5 mutagen/oggtheora.py
  71. +8 −1 mutagen/oggvorbis.py
  72. +1 −2 mutagen/optimfrog.py
  73. +2 −3 mutagen/smf.py
  74. +1 −1 mutagen/tak.py
  75. +1 −2 mutagen/trueaudio.py
  76. +210 −0 mutagen/wave.py
  77. +7 −0 mutagen/wavpack.py
  78. +11 −3 setup.cfg
  79. +4 −1 setup.py
  80. +1 −7 tests/__init__.py
  81. BIN tests/data/2822400-1ch-0s-silence.dff
  82. BIN tests/data/5644800-2ch-s01-silence-dst.dff
  83. BIN tests/data/5644800-2ch-s01-silence.dff
  84. BIN tests/data/dsd.wv
  85. BIN tests/data/ep7.m4b
  86. BIN tests/data/ep9.m4b
  87. BIN tests/data/nero-chapters.m4b
  88. BIN tests/data/silence-2s-PCM-16000-08-ID3v23.wav
  89. BIN tests/data/silence-2s-PCM-16000-08-notags.wav
  90. BIN tests/data/silence-2s-PCM-44100-16-ID3v23.wav
  91. +34 −0 tests/quality/test_flake8.py
  92. +0 −39 tests/quality/test_pep8.py
  93. +0 −55 tests/quality/test_pyflakes.py
  94. +0 −45 tests/quality/util.py
  95. +33 −19 tests/test___init__.py
  96. +13 −25 tests/test__id3frames.py
  97. +3 −10 tests/test__id3specs.py
  98. +1 −18 tests/test__id3util.py
  99. +9 −0 tests/test__iff.py
  100. +145 −0 tests/test__riff.py
  101. +28 −31 tests/test__util.py
  102. +19 −26 tests/test__vorbis.py
  103. +38 −28 tests/test_aiff.py
  104. +15 −26 tests/test_apev2.py
  105. +18 −37 tests/test_asf.py
  106. +78 −0 tests/test_dsdiff.py
  107. +0 −5 tests/test_easyid3.py
  108. +5 −23 tests/test_flac.py
  109. +16 −16 tests/test_id3.py
  110. +1 −1 tests/test_m4a.py
  111. +25 −25 tests/test_mp3.py
  112. +69 −47 tests/test_mp4.py
  113. +5 −5 tests/test_musepack.py
  114. +33 −15 tests/test_ogg.py
  115. +4 −4 tests/test_oggflac.py
  116. +1 −1 tests/test_oggopus.py
  117. +2 −2 tests/test_oggspeex.py
  118. +3 −3 tests/test_oggtheora.py
  119. +6 −6 tests/test_oggvorbis.py
  120. +2 −7 tests/test_tools.py
  121. +2 −3 tests/test_tools_mid3iconv.py
  122. +2 −13 tests/test_tools_mid3v2.py
  123. +1 −2 tests/test_tools_moggsplit.py
  124. +3 −4 tests/test_tools_util.py
  125. +224 −0 tests/test_wave.py
  126. +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
39 NEWS
@@ -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"

No commit comments for this range