[LTP] [PATCH v2 00/15] Fix ujson bugs
Andrea Cervesato
andrea.cervesato@suse.de
Tue Oct 13 14:01:56 CEST 2026
- fix 4-byte UTF-8 sequence decoding in ujson_utf8_next()
- fix out-of-bounds read on invalid UTF-8 in ujson_writer
- prevent infinite loop when read() returns 0 in ujson_reader
- fix inverted open() error check in ujson_writer_file_open()
- return UTF-8 length when calculating string size in ujson_reader
- combine UTF-16 surrogate pairs and reject lone surrogates
- check for signed integer overflow when parsing numbers
- fix error propagation when newline() fails in ujson_writer
- check output return values in esc_flush() helper
- unescape object IDs and reset type on error in ujson_reader
- reject empty and zero-sized files in ujson_reader_load()
- reject \u0000 escape sequences in string values
- set errno when a file flush fails in ujson_writer
- advance buffer pointer on short write in ujson_writer
- flush buffered data before direct writes in ujson_writer
Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
---
Changes in v2:
- ujson: reader: Prevent infinite loop on EOF: fail load on premature
EOF instead of accepting truncated file.
- ujson: reader: Return UTF-8 length when !str: split out UTF-8 length
calculation when !str into separate commit before surrogate handling.
- ujson: reader: Combine UTF-16 surrogate pairs: reorder checks to
inspect unpaired low surrogates first.
- ujson: reader: Check for signed integer overflow: assign negative
integers with -(long)val.
- ujson: writer: Check return value in esc_flush(): replace ESC_FLUSH
macro with esc_flush() helper function and check return values.
- ujson: reader: Do not increment depth on overflow: dropped from
series.
- ujson: reader: Parse escape sequences in object IDs: reset res->type
to UJSON_VOID on key parsing failure.
- ujson: reader: Reject files with zero size: reject zero-sized and
empty files in ujson_reader_load() instead of dynamic reallocation.
- ujson: writer: Set errno when a flush fails: distinguish ret == 0
with a dedicated error message and errno = EAGAIN.
- ujson: writer: Flush buffer before direct writes: move !buf_len
check into out_writer_file_write().
- Link to v1: https://lore.kernel.org/20261005-fix_core_lib_deepseek-v1-0-fec334ce8e80@suse.com
---
Andrea Cervesato (15):
ujson: Fix 4-byte UTF-8 sequence decoding
ujson: writer: Fix OOB read on invalid UTF-8
ujson: reader: Prevent infinite loop on EOF
ujson: writer: Fix open() return value check
ujson: reader: Return UTF-8 length when !str
ujson: reader: Combine UTF-16 surrogate pairs
ujson: reader: Check for signed integer overflow
ujson: writer: Return error when newline() fails
ujson: writer: Check return value in esc_flush()
ujson: reader: Parse escape sequences in object IDs
ujson: reader: Reject files with zero size
ujson: reader: Reject \u0000 escape in strings
ujson: writer: Set errno when a flush fails
ujson: writer: Advance buffer on short write
ujson: writer: Flush buffer before direct writes
include/ujson_utf.h | 6 +--
libs/ujson/ujson_reader.c | 101 ++++++++++++++++++++++++++++++++--------------
libs/ujson/ujson_writer.c | 75 ++++++++++++++++++++++++----------
3 files changed, 126 insertions(+), 56 deletions(-)
---
base-commit: 07da37cf3dbda876b33ad820168a33b9deacbddb
change-id: 20260925-fix_core_lib_deepseek-2ba9018c7588
Best regards,
--
Andrea Cervesato <andrea.cervesato@suse.com>
More information about the ltp
mailing list