[v2] Second iteration of object layout changes#408
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## anilm3/v2 #408 +/- ##
=============================================
- Coverage 85.44% 85.39% -0.06%
=============================================
Files 176 176
Lines 8982 9015 +33
Branches 3828 3842 +14
=============================================
+ Hits 7675 7698 +23
- Misses 509 512 +3
- Partials 798 805 +7
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Benchmarks clangBenchmark execution time: 2025-06-06 13:43:56 Comparing candidate commit e9fdd3c in PR branch Found 1 performance improvements and 0 performance regressions! Performance is the same for 0 metrics, 0 unstable metrics. scenario:global-benchmark.random.clang
|
Benchmarks gccBenchmark execution time: 2025-06-04 21:33:22 Comparing candidate commit e40a954 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 1 metrics, 0 unstable metrics. |
Benchmarks clang-pgoBenchmark execution time: 2025-06-04 21:47:41 Comparing candidate commit e40a954 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 1 metrics, 0 unstable metrics. |
* Object view: read only abstraction to ddwaf_object (#341) * [v2] Remove mingw builds (#381) * Writable objects: owned and borrowed object and object limits removal (#378, #382) * [v2] Refactor and improve object types (#387) * [v2] Update unit tests to use new abstractions (#389) * [v2] Update `raw_configuration` type to use `object_view` (#390) * [v2] Remove remaining uses of ddwaf_object in `src` and `tests/unit` (#391) * [v2] JWT Decoding Processor (#401) * [v2] First iteration of object layout changes (#394) * Split context data insertion from evaluation (#407) * [v2] Second iteration of object layout changes (#408) * [v2] Add new fingerprint and object view tests (#414) * Reenable attribute collector unit test (#415) * [v2] Container view types (#413) * Exclude assertions from coverage (#416) * [v2] Use allocators internally instead of malloc/free and stop generating zero-terminated strings (#418) * Add memory resource to owned and borrowed objects (#428) * [v2] Propagate allocators from context (#420) * [v2] Update interface and expose allocators (#427) * Refactor evaluation stages out of the context (#442) * Subcontext: replace ephemerals with a new scope with user-defined lifetime derived from the context (#443) * Validator: Add support for testing subcontexts and attributes (#451) * [v2] Pass allocator to context and subcontext eval and add new allocators (#452) * Update logger to avoid dependencies on ddwaf.h (#453) * [v2] Return DDWAF_MATCH when there are events, attributes or actions (#455) * [v2] Cleanup: remove exclusion namespace and some redundant references (#456)
This PR completely changes
ddwaf_objectto be composed of multiple different subtypes, including small and literal (non-owned) strings. This new layout makesddwaf_objecta union in order to maximise the amount of memory that can be used within the small string, as well as to ensure that all fields are naturally aligned. The new string types:uint32_maxcharacters, these don't have a capacity field so their capacity, i.e. the number of allocated bytes, must equal their size.uint32_max, but the main difference is that these aren't freed at all as they are intended to hold literals or non-owned strings.In addition, this PR introduces an internal and external definition of
ddwaf_objectwhich is primarily to allow the use of internal types within the internal definition (detail::object), extending the type with convenience methods (although none have been added here), etc.