dissect.cstruct 5.0.dev12__tar.gz → 5.0.dev14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/CHANGELOG.md +14 -0
  2. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/PKG-INFO +1 -1
  3. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/compiler.py +559 -96
  4. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/cstruct.py +1 -1
  5. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/base.py +37 -11
  6. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/char.py +7 -3
  7. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/structure.py +31 -32
  8. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/wchar.py +18 -7
  9. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/PKG-INFO +1 -1
  10. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/scm_version.json +2 -2
  11. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_align.py +76 -0
  12. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_bitfield.py +80 -0
  13. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_compiler.py +623 -20
  14. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_base.py +55 -0
  15. dissect_cstruct-5.0.dev14/tests/test_types_char.py +219 -0
  16. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_enum.py +23 -0
  17. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_int.py +26 -0
  18. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_packed.py +25 -0
  19. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_pointer.py +41 -0
  20. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_structure.py +313 -6
  21. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_union.py +214 -0
  22. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_void.py +15 -0
  23. dissect_cstruct-5.0.dev14/tests/test_types_wchar.py +330 -0
  24. dissect_cstruct-5.0.dev12/tests/test_types_char.py +0 -105
  25. dissect_cstruct-5.0.dev12/tests/test_types_wchar.py +0 -150
  26. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/.git-blame-ignore-revs +0 -0
  27. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/.gitattributes +0 -0
  28. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/COPYRIGHT +0 -0
  29. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/LICENSE +0 -0
  30. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/MANIFEST.in +0 -0
  31. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/README.md +0 -0
  32. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/__init__.py +0 -0
  33. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/bitbuffer.py +0 -0
  34. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/exception.py +0 -0
  35. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/expression.py +0 -0
  36. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/lexer.py +0 -0
  37. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/parser.py +0 -0
  38. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/tools/__init__.py +0 -0
  39. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/tools/stubgen.py +0 -0
  40. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/__init__.py +0 -0
  41. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/enum.py +0 -0
  42. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/flag.py +0 -0
  43. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/int.py +0 -0
  44. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/leb128.py +0 -0
  45. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/packed.py +0 -0
  46. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/pointer.py +0 -0
  47. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/types/void.py +0 -0
  48. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect/cstruct/util.py +0 -0
  49. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/SOURCES.txt +0 -0
  50. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/dependency_links.txt +0 -0
  51. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/entry_points.txt +0 -0
  52. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/requires.txt +0 -0
  53. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/scm_file_list.json +0 -0
  54. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/dissect.cstruct.egg-info/top_level.txt +0 -0
  55. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/examples/disk.py +0 -0
  56. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/examples/mirai.py +0 -0
  57. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/examples/pe.py +0 -0
  58. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/examples/protobuf.py +0 -0
  59. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/examples/secdesc.py +0 -0
  60. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/pyproject.toml +0 -0
  61. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/setup.cfg +0 -0
  62. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/__init__.py +0 -0
  63. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/_data/testdef.txt +0 -0
  64. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/_docs/Makefile +0 -0
  65. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/_docs/__init__.py +0 -0
  66. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/_docs/conf.py +0 -0
  67. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/_docs/index.rst +0 -0
  68. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/conftest.py +0 -0
  69. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_annotations.py +0 -0
  70. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_basic.py +0 -0
  71. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_benchmark.py +0 -0
  72. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_bitbuffer.py +0 -0
  73. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_ctypes.py +0 -0
  74. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_expression.py +0 -0
  75. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_lexer.py +0 -0
  76. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_parser.py +0 -0
  77. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_tools_stubgen.py +0 -0
  78. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_custom.py +0 -0
  79. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_flag.py +0 -0
  80. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_types_leb128.py +0 -0
  81. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/test_utils.py +0 -0
  82. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tests/utils.py +0 -0
  83. {dissect_cstruct-5.0.dev12 → dissect_cstruct-5.0.dev14}/tox.ini +0 -0
@@ -21,6 +21,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
21
21
  - Compiled structures calculate the sizes of dynamic arrays directly, instead of evaluating the expression.
22
22
  - Faster paths for parsing primitive types from bytes-like objects, enum and flag lookups and flag operators.
23
23
  - Null-terminated strings are read in chunks from seekable streams.
24
+ - Improve writing performance:
25
+ - The compiler now generates code for writing structures and unions too! It uses a similar approach, grouping fields and writes where possible.
26
+ - `obj.dumps()` and `obj.write()` no longer create a `functools.partial` on every access. As a result, they no longer accept a `value` argument.
27
+
28
+ ### Fixed
29
+
30
+ - Structures and unions no longer share nested structures and arrays between their default values.
31
+ - Unions can be created with default values and read if they have doubly nested structures or nested unions.
32
+ - Writing a `bytearray` to a `char` array no longer modifies the `bytearray`.
33
+ - Writing a structure correctly returns the amount of bytes written, including padding and bit fields.
34
+ - Writing a structure raises an `AttributeError` for missing attributes and for values of a nested structure field that aren't a structure, instead of writing default values.
35
+ - A surrogate pair takes up two entries of a `wchar` array, so writing it no longer writes more bytes than the size of the array.
36
+ - A `wchar` string can hold a lone surrogate, instead of raising an error for the whole structure when reading or writing it. Bytes are written back as they were stored.
37
+ - Writing more than a single character to a `char` or `wchar` raises a `ValueError`, instead of writing all of it and moving the fields after it. An empty value is padded.
24
38
 
25
39
  ## [4.5] - 20-05-2025
26
40
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dissect.cstruct
3
- Version: 5.0.dev12
3
+ Version: 5.0.dev14
4
4
  Summary: A Dissect module implementing a parser for C-like structures: structure parsing in Python made easy
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License-Expression: Apache-2.0