1.3 - 2025-09-04
- FU::Validate: Scalar validations now reject control characters by default
- FU::Validate: Add `allow_control` option to override above behavior
- FU::Util: JSON and URI parsing now always permit control characters
- FU::Util: More strict UTF-8 validation on path & URI decoding
- FU::Util: Deprecate `decode_utf8()`
- FU::Util: Deprecate `allow_control` option in `json_parse()`
1.2 - 2025-07-06
- FU::Pg: Throw error on non-boolean-looking Perl values for boolean bind
parameters
- FU: Improve setting process status during startup
1.1 - 2025-06-07
- FU::SQL: Add IDENT function and `quote_identifier` option
- FU::Pg: Set appropriate `quote_identifier` for `$conn->Q()`
- FU: Improve `--monitor` file change detection
- FU::XMLWriter: Disallow stringification of bare Perl references
- FU::Util::json_parse(): Disallow control characters in strings, add
`allow_control` option to revert to old behavior.
- Some doc fixes
1.0 - 2025-05-11
- FU::Util: Fix parsing of empty sections in query_decode()
- FU::Util: Fix buffer overflow in json_format() float formatting
- FU::Util: Reject `0x1f` in utf8_decode()
- FU::Pg: Add perl<->text and bin<->text type conversion methods
- FU::Validate: Improved error messages
- FU::MultipartFormData: Various parser fixes
- FU: Include request body in verbose error logs
- FU: Add fu->log_verbose()
- FU: Extend debug_info pages with request body, response body, 'fu'
object dump, expandable query parameters and interpolated SQL queries
- FU: Improve styling of debug_info pages
- FU: Preserve headers on fu->redirect
- FU: Ignore HTTP_CONTENT_LENGTH and HTTP_CONTENT_TYPE FastCGI parameters
- FU: Suppress warning about missing files in FU::monitor_path
- FU: Reject hash character and newlines in request path
- Fix creating read-only undef/true/false in json_parse() and FU::Pg
- Benchmark updates
0.5 - 2025-04-24
- FU::Util: Set O_CLOEXEC on fds received through `fdpass_recv()`
- FU::Util: Fix interpretation of false options in `json_format()` and
`json_parse()`
- FU::Validate: Add `coerce()` and `empty()` utility methods
- FU::Validate: Limit values of int/uint input to 64 bits
- FU::Validate: Normalize num/int/uint inputs to Perl numeric types
- FU::Pg: Add `escape_literal()` and `escape_identifier()` methods
- FU::Pg: Use less memory for `kvv()`, `kva()` and `kvh()` methods
- FU::Pg: Disallow chaining of `cache()`, `text()`, `text_params()` and
`text_results()` methods on connection and transaction objects
- FU: Throw and catch FU::Validate errors without wrapping in `fu->error()`
- FU: Add `-progname` option and add diagnostics to process names
- FU: Whole bunch of misc fixes
- Doc fixes
- Fix nul-termination of some XS-created strings
0.4 - 2025-03-19
- FU::Validate: Support arrayref schemas
- FU::Validate: Rename 'values' option to 'elems'
- FU::Validate: Repurpose 'values' option to validate hash values
- FU::Validate: Merge nested 'elems', 'keys' and 'values' schemas during compile()
- FU::Validate: Rename 'scalar' to 'accept_scalar'
- FU::Validate: Add 'accept_array' option
- FU::Util: Add 'html_safe' option to json_format()
- FU::Util: Add gzip_compress() wrapper for libdeflate.so, zlib-ng.so or zlib.so
- FU::Util: Add brotli_compress() wrapper for libbrotlienc.so
- FU: Consistency fixes for fu->json() and fu->formdata()
- FU: Add fu->cookie() and fu->set_cookie()
- FU: Add support for brotli output compression
- FU: Use gzip_compress() for faster gzip output compression
0.3 - 2025-03-10
- FU::Validate: Change API, ->validate() now returns data or throws error on failure
- FU::Validate: Rename 'rmwhitespace' to 'trim'
- FU::Validate: Support (more) human-readable error messages
- FU::Pg: Add support for COPY operations
- FU::Pg: Support types with dynamic OIDs
- FU: Add support for reading multipart/form-data
- FU: Add convenience methods for reading and writing JSON
- FU: Fix error in handling a 400
- FU::MultipartFormData: New helper module
- Fix some tests
- Some doc improvements
0.2 - 2025-02-28
- FU: Add debug_info web interface
- FU: Add fu->denied and fu->notfound methods
- FU: Support randomized --max-reqs
- FU: Drop Zstd output compression support
- FU::PG: Support custom type overrides with $conn->set_type()
- FU::PG: Change default format for the 'date' type
- FU::PG: Add support for 'time', '$date_str' and '$hex' types
- FU::PG: Skip query prepare step when possible
- Fix portability for older compilers & longdouble Perls
- Fix some memory leaks
0.1 - 2025-02-25
- Initial release