Add LEB128 integer support v0.4.0
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 29 Sep 2023 17:10:59 +0000 (13:10 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Fri, 29 Sep 2023 17:26:42 +0000 (13:26 -0400)
commit05f81895d3d47ef46db3f4bcaa3bfe979eaeb6da
tree160a19814fcfcc27d4fe1bbcf2be8d3006473198
parentbf8f3b38c613b6dbb59caec257a8c86e42c0d97a
Add LEB128 integer support

This patch adds unsigned and signed LEB128 [1] integer support with the
following Normand format:

    {my_val : uleb128}
    {my_val : sleb128}

LEB128 is a popular variable-length integer encoding which has
CTF 2 [2], Android, HP, DWARF, WebAssembly, the xz format, and many more
as its users.

To avoid any confusion, the term "value" in the Normand project is
renamed to "fixed-length integer" (`README.adoc`, test names, and the
code itself).

The challenge for a LEB128 item is similar to a repetition with an
expression: you don't know the final length when parsing because it can
depend on preceding labels and variables. Therefore the repetition item
validation and handling code is reused.

The new test files with names containing `-byte` were randomly generated
using the `leb128` package, therefore Normand agrees with another LEB128
implementation.

[1]: https://en.wikipedia.org/wiki/LEB128
[2]: https://diamon.org/ctf/

Change-Id: Ieac783dcdd093e1b5c70396a12fc2b568c9885bb
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
110 files changed:
README.adoc
normand/normand.py
pyproject.toml
tests/fail-fl-int-32b-out-of-range-neg.nt [new file with mode: 0644]
tests/fail-fl-int-32b-out-of-range-pos.nt [new file with mode: 0644]
tests/fail-fl-int-8b-out-of-range-neg.nt [new file with mode: 0644]
tests/fail-fl-int-8b-out-of-range-pos.nt [new file with mode: 0644]
tests/fail-fl-int-empty-expr.nt [new file with mode: 0644]
tests/fail-fl-int-eval-type.nt [new file with mode: 0644]
tests/fail-fl-int-eval.nt [new file with mode: 0644]
tests/fail-fl-int-inval-len.nt [new file with mode: 0644]
tests/fail-fl-int-inval-syntax.nt [new file with mode: 0644]
tests/fail-fl-int-missing-bo.nt [new file with mode: 0644]
tests/fail-fl-int-missing-len.nt [new file with mode: 0644]
tests/fail-fl-int-unknown-name-1.nt [new file with mode: 0644]
tests/fail-fl-int-unknown-name-2.nt [new file with mode: 0644]
tests/fail-sleb128-empty-expr.nt [new file with mode: 0644]
tests/fail-uleb128-empty-expr.nt [new file with mode: 0644]
tests/fail-uleb128-eval-type.nt [new file with mode: 0644]
tests/fail-uleb128-eval.nt [new file with mode: 0644]
tests/fail-uleb128-inval-syntax.nt [new file with mode: 0644]
tests/fail-uleb128-unknown-name-1.nt [new file with mode: 0644]
tests/fail-uleb128-unknown-name-2.nt [new file with mode: 0644]
tests/fail-uleb128-unreachable-label-1.nt [new file with mode: 0644]
tests/fail-uleb128-unreachable-label-2.nt [new file with mode: 0644]
tests/fail-uleb128-unreachable-label-3.nt [new file with mode: 0644]
tests/fail-val-32b-out-of-range-neg.nt [deleted file]
tests/fail-val-32b-out-of-range-pos.nt [deleted file]
tests/fail-val-8b-out-of-range-neg.nt [deleted file]
tests/fail-val-8b-out-of-range-pos.nt [deleted file]
tests/fail-val-empty-expr.nt [deleted file]
tests/fail-val-eval-type.nt [deleted file]
tests/fail-val-eval.nt [deleted file]
tests/fail-val-inval-len.nt [deleted file]
tests/fail-val-inval-syntax.nt [deleted file]
tests/fail-val-missing-bo.nt [deleted file]
tests/fail-val-missing-len.nt [deleted file]
tests/fail-val-unknown-name-1.nt [deleted file]
tests/fail-val-unknown-name-2.nt [deleted file]
tests/fail-var-label-bo-none.nt
tests/pass-fl-int-16b-be.nt [new file with mode: 0644]
tests/pass-fl-int-16b-le.nt [new file with mode: 0644]
tests/pass-fl-int-24b-be.nt [new file with mode: 0644]
tests/pass-fl-int-24b-le.nt [new file with mode: 0644]
tests/pass-fl-int-32b-be.nt [new file with mode: 0644]
tests/pass-fl-int-32b-le.nt [new file with mode: 0644]
tests/pass-fl-int-40b-be.nt [new file with mode: 0644]
tests/pass-fl-int-40b-le.nt [new file with mode: 0644]
tests/pass-fl-int-48b-be.nt [new file with mode: 0644]
tests/pass-fl-int-48b-le.nt [new file with mode: 0644]
tests/pass-fl-int-56b-be.nt [new file with mode: 0644]
tests/pass-fl-int-56b-le.nt [new file with mode: 0644]
tests/pass-fl-int-64b-be.nt [new file with mode: 0644]
tests/pass-fl-int-64b-le.nt [new file with mode: 0644]
tests/pass-fl-int-8b.nt [new file with mode: 0644]
tests/pass-fl-int-icitte.nt [new file with mode: 0644]
tests/pass-readme-intro-leb128.nt [new file with mode: 0644]
tests/pass-readme-learn-fl-int-1.nt [new file with mode: 0644]
tests/pass-readme-learn-fl-int-2.nt [new file with mode: 0644]
tests/pass-readme-learn-fl-int-3.nt [new file with mode: 0644]
tests/pass-readme-learn-leb128-1.nt [new file with mode: 0644]
tests/pass-readme-learn-leb128-2.nt [new file with mode: 0644]
tests/pass-readme-learn-val-1.nt [deleted file]
tests/pass-readme-learn-val-2.nt [deleted file]
tests/pass-readme-learn-val-3.nt [deleted file]
tests/pass-sleb128-1-byte.nt [new file with mode: 0644]
tests/pass-sleb128-10-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-2-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-3-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-4-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-5-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-6-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-7-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-8-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-9-bytes.nt [new file with mode: 0644]
tests/pass-sleb128-limits.nt [new file with mode: 0644]
tests/pass-sleb128-minus-one.nt [new file with mode: 0644]
tests/pass-sleb128-zero.nt [new file with mode: 0644]
tests/pass-uleb128-1-byte.nt [new file with mode: 0644]
tests/pass-uleb128-10-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-2-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-3-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-4-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-5-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-6-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-7-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-8-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-9-bytes.nt [new file with mode: 0644]
tests/pass-uleb128-expr-label-inner.nt [new file with mode: 0644]
tests/pass-uleb128-expr-label.nt [new file with mode: 0644]
tests/pass-uleb128-expr-var-1.nt [new file with mode: 0644]
tests/pass-uleb128-expr-var-2.nt [new file with mode: 0644]
tests/pass-uleb128-limits.nt [new file with mode: 0644]
tests/pass-uleb128-zero.nt [new file with mode: 0644]
tests/pass-val-16b-be.nt [deleted file]
tests/pass-val-16b-le.nt [deleted file]
tests/pass-val-24b-be.nt [deleted file]
tests/pass-val-24b-le.nt [deleted file]
tests/pass-val-32b-be.nt [deleted file]
tests/pass-val-32b-le.nt [deleted file]
tests/pass-val-40b-be.nt [deleted file]
tests/pass-val-40b-le.nt [deleted file]
tests/pass-val-48b-be.nt [deleted file]
tests/pass-val-48b-le.nt [deleted file]
tests/pass-val-56b-be.nt [deleted file]
tests/pass-val-56b-le.nt [deleted file]
tests/pass-val-64b-be.nt [deleted file]
tests/pass-val-64b-le.nt [deleted file]
tests/pass-val-8b.nt [deleted file]
tests/pass-val-icitte.nt [deleted file]
This page took 0.029725 seconds and 4 git commands to generate.