Skip to content

Releases: rindPHI/isla

ISLa 1.9.3

10 Nov 12:00
v1.9.3
d282387
Compare
Choose a tag to compare

[1.9.3] - 2022-11-10

Changed

  • Further improvements in input repair: Better ordering of abstracted trees. Now, all
    abstractions are generated at once (not lazily in a generator), which might impact
    performance; however, the results are ordered by tree size, i.e., less abstract trees
    come first, which is the expected behavior. Code is simplified.

[1.9.2] - 2022-11-10

Changed

  • Improved input repair:
    • Results are more local now, performance improvement for more complicated repairs
    • Fixed tree abstraction for the top (empty) path

ISLa 1.9.1

09 Nov 15:02
v1.9.1
38cb1ff
Compare
Choose a tag to compare

[1.9.1] - 2022-11-08

Changed

  • Bug fix: Python extension files could not use local definitions before (e.g., helper
    functions); this is fixed now.
  • Buf fix: Epsilon productions are correctly processed in unparse_grammar.

[1.9.0] - 2022-11-08

Added

  • It is now possible to extend ISLa with custom structural or semantic predicates when
    using the CLI (this concerns isla solve, isla parse, isla check, isla fuzz,
    isla mutate, isla find, and isla mutate) by passing a Python file as input
    that contains a function

    predicates() -> typing.Set[isla.language.StructuralPredicate | isla.language.SemanticPredicate]

    Additionally or alternatively, that file may define a variable grammar or a function
    grammar() specifying the grammar of the language under test. This behavior, already
    implemented in previous ISLa versions (for the variable declaration, see "Changed"),
    is unaffected by the predicate extension feature.

Changed

  • In Python extension files, grammars may alternatively be defined as the return
    value of a function def grammar() -> Dict[str, List[str]] instead of an assignment
    to a variable grammar. This is the preferred style; the variable assignment may get
    deprecated in the future.

ISLa 1.8.0

31 Oct 16:19
v1.8.0
1b02cf2
Compare
Choose a tag to compare

[1.8.0] - 2022-10-21

Added

  • Added isla find command to filter files passing syntactic & semantic constraints

Changed

  • isla create now prints out the created files.

[1.7.3] - 2022-10-13

Changed

  • Performance fix with most impact in instantiating large structures with the grammar
    fuzzer: More caching & propagation of the "is open" status of derivation trees.

[1.7.2] - 2022-10-13

Changed

  • Creation of zero-length trees for str.len(var) expressions, if var only occurs
    inside str.len applications and optimized Z3 queries are enabled, now works; before,
    such a tree was not found.

[1.7.1] - 2022-10-13

Changed

  • Asserting that creation of fixed-length trees (see comment to version 1.5.0) did work
    as expected; error message suggests disabling optimized queries or refining
    constraints.
  • The CLI captures all exceptions for isla solve and reports them to the command line
    rather than crashing ungracefully.

[1.7.0] - 2022-10-13

Added

  • CLI argument --tree for isla solve to produce JSON output (derivation trees)
    rather than "unparsed" strings.
  • The CLI commands check, repair, and mutate now also accept derivation trees
    in JSON format as inputs, circumventing the need for parsing if, e.g., piping an
    input produced by a grammar fuzzer to the checker.

[1.6.0] - 2022-10-12

Added

  • Command line argument -O which runs ISLa in optimized mode with deactivated
    assertions. Recommended if speed is an issue.

[1.5.0] - 2022-10-12

Added

  • Added special handling for str.len applications: For variables exclusively
    occurring inside str.len, we only ask Z3 for a solution to the numeric length,
    and then randomly create a string of that length. The ISLaSolver has a new option
    enable_optimized_z3_queries to disable this behavior. Future releases will also
    have a CLI option for that purpose.

Changed

  • Bug fix: Wrong precedence of multiplication/division and addition/subtraction in
    ISLa parser; x * y + z was parsed x * (y + z). This is now corrected.
  • Bug fix: Null bytes at the level of SMT expressions (\u{}) were not handled
    correctly in z3_helpers.evalute_z3_expression; instead of \x00, they were
    treated as the 4-character string \u{}.

ISLa 1.4.1

06 Oct 10:35
v1.4.1
5f8fe06
Compare
Choose a tag to compare

[1.4.1] - 2022-10-06

Changed

  • Bug fix: Added forgotten requirement. The "toml" package needs to be installed to use
    ISLa 1.4.0.

[1.4.0] - 2022-10-06

Added

  • Configuration of default ISLa CLI options via .islarc files. The ISLa CLI searches
    for an .islarc files first in the current working directory, then in the user's
    home directory, and uses a bundled resource file as a fallback. All found
    configurations are merged; in case of conflicts, earlier found ones take precedence
    (i.e., the options specified in ./.islarc override all others). The file format
    for .islarc files is TOML.
  • Added isla config command to write the default configuration either to a specified
    output file or to the standard output. This comes handy when one is unsure about the
    available options and to start a complete custom configuration.

ISLa 1.3.3

04 Oct 14:06
v1.3.3
2722e83
Compare
Choose a tag to compare

[1.3.3] - 2022-10-04

Changed

  • Solved packaging bug: Resource files for the isla create command were not
    packaged in installation packages; this is now fixed.

ISLa 1.3.2

30 Sep 10:05
v1.3.2
c7f4773
Compare
Choose a tag to compare

[1.3.2] - 2022-09-30

Changed

  • Bugfix in unparse_grammar related to escaping.
  • Changed standard cost weight vector in CLI (now defaults to
    isla.solver.STD_COST_SETTINGS.weight_vector).
  • Describing individual cost vector components in CLI help text.

ISLa 1.3.1

30 Sep 08:51
v1.3.1
c1a4ae3
Compare
Choose a tag to compare

[1.3.1] - 2022-09-30

Changed

  • Fixed bug in unparse_grammar: Backslashes are correctly escaped now.
  • Fixed bug in parsing of match expressions: Escaped symbols are not handled correctly.
  • Made order of terminals in REST_GRAMMAR deterministic.

[1.3.0] - 2022-09-27

Added

  • Added the CLI command isla mutate and solver method ISLaSolver.mutate for
    mutating inputs in a semantics-preserving way.

v1.2.0

27 Sep 13:51
v1.2.0
692a70b
Compare
Choose a tag to compare

[1.2.0] - 2022-09-27

Changed

  • Added the option to pass multiple constraints via multiple --constraint command
    line parameters in the CLI.

[1.1.0] - 2022-09-27

Added

  • Added the CLI command isla repair and solver method ISLaSolver.repair for
    repairing inputs violating semantic constraints.

ISLa 1.0.1

23 Sep 11:39
v1.0.1
20a3445
Compare
Choose a tag to compare

[1.0.1] - 2022-09-23

Changed

  • The evaluation function evaluate_legacy now better accounts for open derivation
    trees, issuing "unknown" in more cases. For example, if a universal quantifier
    matches possible expansions of an open derivation tree, we return "unknown;"
    similarly if an existential quantifier is not satisfied by any concrete match, but
    there are potential matches (of instantiations of open subtrees) left
  • Fix in can_extend_leaf_to_make_quantifier_match_parent, which sometimes did not
    satisfy its intended semantics of only returning True for potential matches, and
    not for current ones
  • Bug fix: Epsilon expansions in match expressions caused problems before (see test case
    "test_solve_config_grammar_leaddigit_equality" in "test_solver.py")

ISLa 1.0.0

22 Sep 10:13
v1.0.0
d0d5b6d
Compare
Choose a tag to compare

[1.0.0] - 2022-09-22

This first major ISLa release comes with a command line interface and a new solver API.
Please note that the new API is incompatible with the 0.* versions, such that things
can break if you upgrade to 1.0.0 from a previous version. Read the change list
below to learn how you can adapt your code to work with 1.0.0.

Changed

  • The previous solver function ISLaSolver.solve() was removed
  • The function ISLaSolver.fuzz() was renamed to ISLaSolver.solve()
  • The signatures of the old ISLaSolver.fuzz() and the new ISLaSolver.solve()
    functions are different: The new function
    • only ever returns DerivationTree objects
    • raises a StopIteration if no (more) solutions could be found
    • raises a SolverTimeout exception if the solver timed out
  • The previous solver function ISLaSolver.evaluate() was renamed to
    ISLaSolver.check()
  • The new ISLaSolver.check() function returns a "normal" Boolean value (instead of
    a ThreeValuedTruth) and returns an UnknownResultError if truth cannot be
    determined (which should only occur in rare edge cases).
  • The function ISLaSolver.parse() now also checks for semantic validity. It
    • raises a SyntaxError if the input cannot be parsed with the grammar,
    • raises a SemanticError if the input can be parsed, but does not satisfy the
      constraint, and
    • returns a DerivationTree object otherwise.