|
1 | 1 | # libddwaf release |
2 | 2 |
|
| 3 | +## v1.28.0 ([unstable](https://github.com/DataDog/libddwaf/blob/master/README.md#versioning-semantics)) |
| 4 | + |
| 5 | +### New Features |
| 6 | + |
| 7 | +This release introduces a new URI-decomposition preprocessor along with enhancements to action parameter types, initialization performance, and platform support. |
| 8 | + |
| 9 | +#### URI parsing preprocessor |
| 10 | + |
| 11 | +A new `uri_parse` preprocessor has been introduced to convert a single URI into a structured map. URI decomposition follows [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986), with some additions from [WHATWG](https://url.spec.whatwg.org/) for compatibility. This preprocessor improves the ability of the rule writer to target specific URI components without the need for crafting complex and innacurate regular expressions. |
| 12 | + |
| 13 | +An example definition of this preprocessor can be seen below: |
| 14 | +```yaml |
| 15 | +id: decompose-uri |
| 16 | +generator: uri_parse |
| 17 | +conditions: [] |
| 18 | +parameters: |
| 19 | + mappings: |
| 20 | + - inputs: |
| 21 | + - address: server.request.uri.raw |
| 22 | + output: server.request.uri |
| 23 | +evaluate: true |
| 24 | +output: false |
| 25 | +``` |
| 26 | +
|
| 27 | +After the evaluation of this example preprocessor `server.request.uri` will be available as a map containing the following fields: |
| 28 | + |
| 29 | +```yaml |
| 30 | +{ |
| 31 | + "scheme": <string>, |
| 32 | + "userinfo": <string>, |
| 33 | + "host": <string>, |
| 34 | + "port": <unsigned>, |
| 35 | + "path": <string>, |
| 36 | + "query": {}, |
| 37 | + "fragment": <string> |
| 38 | +} |
| 39 | +``` |
| 40 | + |
| 41 | +#### Action parameters: broader scalar support |
| 42 | + |
| 43 | +Action parameters can now include any of the available scalar types in addition to strings. This enables more natural configurations and prevents the need for ad‑hoc conversions by the WAF caller. This is a small, incremental improvement ahead of v2’s planned complex‑type support. |
| 44 | + |
| 45 | +In addition to this change, the `status_code` field of the `block_request` and `redirect_request` actions, as well as the `grpc_status_code` field of the `block_request` action, are now being stored and interpreted as an unsigned integer, rather than a string. |
| 46 | + |
| 47 | +#### Performance & Initialisation |
| 48 | + |
| 49 | +Due to the static initialisation cost of tokenizer regular expressions, this is now deferred to the first ruleset instantiation. This avoids startup overhead and protects request latency from any one‑time initialization costs. No behavior changes are expected for existing rules. |
| 50 | + |
| 51 | +#### Platforms & CI |
| 52 | +Continuous integration now builds and tests libddwaf on Windows ARM64, leveraging the windows-11-arm runners, this is an external contribution from [@Greenie0701](https://github.com/Greenie0701). |
| 53 | + |
| 54 | +### Release changelog |
| 55 | +#### Changes |
| 56 | +- URI parsing preprocessor ([#439](https://github.com/DataDog/libddwaf/pull/439)) |
| 57 | +- Support other scalar types on action parameters ([#441](https://github.com/DataDog/libddwaf/pull/441)) |
| 58 | +- Load tokenizer regexes on first ruleset instantiation ([#446](https://github.com/DataDog/libddwaf/pull/446)) |
| 59 | + |
| 60 | +#### Miscellaneous |
| 61 | +- Add support for building and testing windows arm64 ([#440](https://github.com/DataDog/libddwaf/pull/440)) |
| 62 | + |
3 | 63 | ## v1.27.0 ([unstable](https://github.com/DataDog/libddwaf/blob/master/README.md#versioning-semantics)) |
4 | 64 |
|
5 | 65 | ### New Features |
|
0 commit comments