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