#!/usr/bin/env python # coding: utf-8 # # Fuzzingbook Release Notes # This book and its code use numbered versioning. The version numbers correspond to the version numbers in [the Python pip package](Importing.ipynb). # ## Current Version (in progress) # # This is the version we are preparing for the next release (e.g. what you get when you check out the latest version from [the GitHub repo](__GITHUB_HTML__)). # Major changes will show up here as we make them. # # * Fix: Outputting code coverage using `Coverage` class would prefix _covered_ code with `#`, rather than _uncovered_ code as should be. This has been fixed. # ## Version 1.2.1 (released 2023-11-13) # # * Importing book classes from third-party code would accidentally set a fixed random seed, making all further random decisions deterministic (i.e. produce the same result every time). This is now fixed. # * Minor updates to Python package requirements. # ## Version 1.2 (released 2023-10-23) # # * For announcements, we now use Mastodon ([@TheFuzzingBook@mastodon.social](https://mastodon.social/@TheFuzzingBook)) instead of X. Follow us on Mastodon! # * We have a [new chapter on Fuzzing with Constraints](FuzzingWithConstraints.ipynb) in which we introduce the ISLa constraint language / fuzzer / parser. # * We have a [new chapter on Compiler Testing](PythonFuzzer.ipynb) in which we use grammars to generate, parse, and evolve Python code. # * We now regularly test our code on various Python versions. # * Python 3.12: all chapters work, except for [Symbolic Fuzzing](SymbolicFuzzer.ipynb). # * Python 3.11: all chapters work. # * Python 3.10: all chapters work. # * Python 3.9: all chapters work, except for the two new chapters listed above. (ISLa needs 3.10 or later.) # # For development, we recommend Python 3.10 or 3.11. # * We fixed several typos throughout the book, using the awesome [LTeX](https://github.com/valentjn/vscode-ltex) grammar/spell checker # * `ProbabilisticGrammarMiner` now properly handles empty expansions ([Issue #154](https://github.com/uds-se/fuzzingbook/pull/154)) - thanks to [Martin Eberlein](https://github.com/martineberlein)! # * The [chapter on Fuzzing](Fuzzer.ipynb) now has a more detailed computation of the probability of deleting your home directory. Thanks to [mhamami-abuomar](https://github.com/mhamami-abuomar)! # * We no longer support `fuzzingbook` DockerHub images. # ## Version 1.1 (released 2022-05-18) # # Changes since 1.0: # # * The book has lots of new material (videos, quizzes). # * The code now has static type annotations (and is type checked). # * Requirements and install procedures have been reworked. # * Apart from code fixes, code semantics stays unchanged. # Changes and fixes since 1.0.7: # # * All videos are re-cut – thanks to Aman Roy! # * `Fuzzer.runs()` now returns a list _comprehension_ instead of a list (Issue [#106](https://github.com/uds-se/fuzzingbook/pull/106)) # * Code using `selenium` has been updated to the latest version. # * Fixed a problem in `FasterGrammarFuzzer` (Issue [#130](https://github.com/uds-se/fuzzingbook/pull/130)) - thanks to [CuriousGeorgiy](https://github.com/CuriousGeorgiy)! # ## Version 1.0.7 (released 2022-01-25) # # * The `WebFuzzer` constructor now allows using a subclass of `HTMLGrammarMiner`. # * The `GUIFuzzer` constructor now allows using a subclass of `GUIGrammarMiner`. # * Class diagrams are now simplified, as we skip non-public methods defined in other chapters. # ## Version 1.0.6 (released 2022-01-18) # # * Fixed a major performance bug in grammar fuzzing (Issue [#117](https://github.com/uds-se/fuzzingbook/pull/117)) # * We now work with recent versions of `z3-solver` (Issue [#115](https://github.com/uds-se/fuzzingbook/issues/115)) # * In the [chapter on configuration fuzzing](ConfigurationFuzzer.ipynb), the `OptionGrammarMiner` will now capture args from external Python scripts that are protected by `if __name__ == '__main__'` # * Various minor fixes and documentation improvements # ## Version 1.0.5 (released 2022-01-10) # # * This release increases compatibility with various Z3 versions for [concolic fuzzing](ConcolicFuzzer.ipynb). # * In the [chapter on symbolic fuzzing](SymbolicFuzzer.ipynb), the `AdvancedSymbolicFuzzer` is now named `SymbolicFuzzer` plain and simple. (`AdvancedSymbolicFuzzer` still works as an alias). # ## Version 1.0.4 (released 2022-01-04) # # Happy new year! # * This release fixes some bugs in the [chapter on concolic fuzzing](ConcolicFuzzer.ipynb), notably in the `ConcolicTracer.zeval()` method. # # ## Version 1.0.3 (released 2021-12-14) # # * On Unix, the [`ExpectTimeout`](ExpectError.ipynb) class is now much more performant # * The chapter on [greybox fuzzing with grammars](GreyboxGrammarFuzzer.ipynb) should now run on Windows, too # ## Version 1.0.2 (released 2021-12-08) # # * Minor fixes in the `AFLGoSchedule` and `AFLFastSchedule` classes in the [chapter on greybox fuzzing](GreyboxFuzzer.ipynb). # * Minor fixes across the board. # ## Version 1.0.1 (released 2021-11-23) # # * The code now passes `mypy` static type checks. # * The `Coverage` class now supports `function_names()` and `__repr__()` methods. Its `__exit__()` method is no longer included in coverage. # * Minor fixes across the board. # ## Version 1.0 (released 2021-11-04) # # * We now support (but also require) **Python 3.9 or later**. Earlier versions still required Python 3.6 due to some outdated modules such as `astor` and `enforce` we depended upon (and now don't anymore). # * We added missing dependencies to the `fuzzingbook` pip package ([Issue #44](https://github.com/uds-se/debuggingbook/issues/44) in `debuggingbook`) such that `pip install fuzzingbook` also installs all the packages it depends upon. Thanks to @TheSilvus for reporting this! # * We fixed a warning '.gitignore is a symbolic link' during git checkout ([Issue #43](https://github.com/uds-se/debuggingbook/issues/43)) Thanks to @rjc for reporting this! # * We identified some chapters that were using `numpy.random` rather than Python `random`, resulting in, well, random results every time we'd build the book. This is now fixed, and more consistent. # * Under the hood, we have adopted several more improvements from our sister project ["The Debugging Book"](https://www.debuggingbook.org). Notably, the build process is much streamlined, and we run [continuous integration tests](https://github.com/uds-se/fuzzingbook/actions) to ensure quality of changes and pull requests. # ## Version 0.9.5 (released 2021-06-08) # # * Lots of minor fixes in HTML generation, adopting new tools and tests from ["The Debugging Book"](https://www.debuggingbook.org). # * Code functionality should be unchanged. # * The `bookutils` module is now shared with the `debuggingbook` project; some (hopefully neutral) fixes. # * Several typos and other minor fixes throughout the book. # ## Version 0.9.0 # # * In the Web version, some not-so-critical details (typically, long implementations and logs) are only shown on demand. This is still work in progress. # * The `fuzzingbook_utils` module used by notebooks is now renamed to `bookutils`. Code and notebooks using `fuzzingbook_utils` may still work, but will issue a deprecation warning. # * Several minor fixes to functionality in [Parsing and Recombining Inputs](Parser.ipynb), [Concolic Fuzzing](ConcolicFuzzer.ipynb), [Symbolic Fuzzing](SymbolicFuzzer.ipynb) # * Better style when printing from browser (colored text, smaller fonts) # * Avoid tracking in YouTube videos # * Several typos and other minor fixes throughout the book # ## Version 0.8.0 (released 2019-05-21) # # First numbered fuzzingbook release. # # * Includes [Python pip package](Importing.ipynb). # * Includes _Synopsis_ sections at the beginning of each chapter, highlighting their usage in own code. # * Describes [Tours through the Book](Tours.ipynb). # ## Chapter Releases # # Before switching to numbered releases, new chapters were coming out every Tuesday. # # 1. [Introduction to Software Testing](Intro_Testing.ipynb) – 2018-10-30 # 1. [Fuzzing: Breaking Things with Random Inputs](Fuzzer.ipynb) – 2018-10-30 # 1. [Getting Coverage](Coverage.ipynb) – 2018-11-06 # 1. [Mutation-Based Fuzzing](MutationFuzzer.ipynb) – 2018-11-06 # 1. [Fuzzing with Grammars](Grammars.ipynb) – 2018-11-13 # 1. [Efficient Grammar Fuzzing](GrammarFuzzer.ipynb) – 2018-11-20 # 1. [Grammar Coverage](GrammarCoverageFuzzer.ipynb) – 2018-11-27 # 1. [Testing Configurations](ConfigurationFuzzer.ipynb) – 2018-12-04 # 1. [Parsing and Recombining Inputs](Parser.ipynb) – 2018-12-11 # 1. [Probabilistic Grammar Fuzzing](ProbabilisticGrammarFuzzer.ipynb) – 2018-12-18 # 1. [Fuzzing with Generators](GeneratorGrammarFuzzer.ipynb) – 2019-01-08 # 1. [Fuzzing APIs](APIFuzzer.ipynb) – 2019-01-15 # 1. [Carving Unit Tests](Carver.ipynb) – 2019-01-22 # 1. [Reducing Failure-Inducing Inputs](Reducer.ipynb) – 2019-01-29 # 1. [Web Testing](WebFuzzer.ipynb) – 2019-02-05 # 1. [GUI Testing](GUIFuzzer.ipynb) – 2019-02-12 # 1. [Mining Input Grammars](GrammarMiner.ipynb) – 2019-02-19 # 1. [Tracking Information Flow](InformationFlow.ipynb) – 2019-03-05 # 1. [Concolic Fuzzing](ConcolicFuzzer.ipynb) – 2019-03-12 # 1. [Symbolic Fuzzing](SymbolicFuzzer.ipynb) – 2019-03-19 # 1. [Mining Function Specifications](DynamicInvariants) – 2019-03-26 # 1. [Search-Based Fuzzing](SearchBasedFuzzer.ipynb) – 2019-04-02 # 1. [Evaluating Test Effectiveness with Mutation Analysis](MutationAnalysis.ipynb) – 2019-04-09 # 1. [Greybox Fuzzing](GreyboxFuzzer.ipynb) – 2019-04-16 # 1. [Greybox Fuzzing with Grammars](GreyboxGrammarFuzzer.ipynb) – 2019-04-30 # 1. [Fuzzing in the Large](FuzzingInTheLarge.ipynb) – 2019-05-07 # 1. [When to Stop Fuzzing](WhenToStopFuzzing.ipynb) – 2019-05-14 # 1. [Tours through the Book](Tours.ipynb) - 2019-05-21 # # After all chapters were out, we switched to a release-based schedule, with numbered minor and major releases coming out when they are ready.