What's Changed
- Fix buffer overflow in the SAX parser's IO read callbacks by @Watson1978 in #413
- Fix stack buffer overflow on long class names in object mode by @Watson1978 in #414
- Fix integer overflow with an oversized dump :indent option by @Watson1978 in #415
- Speed up Ox.dump string and indent writing by @Watson1978 in #416
- Speed up Ox.dump integer serialization by @Watson1978 in #417
- Limit sax nesting by @ohler55 in #418
- Fix xml_str_len returning ~49x the escaped length by @Watson1978 in #419
- Fix GC crash from a stack PInfo wrapper left dangling on a raised parse by @Watson1978 in #420
- Speed up Ox.load text parsing with a SWAR fast path by @Watson1978 in #421
- Drop a redundant strlen and newline scan from text node parsing by @Watson1978 in #422
- Speed up Ox.dump / Ox::Builder string escaping with a SWAR fast path by @Watson1978 in #423
- Port oj's fast_memcpy16 into the Ox.dump short-copy path by @Watson1978 in #424
- Free the Ox.dump output buffer when a dump raises by @Watson1978 in #425
- Add ruby_memcheck (Valgrind memcheck) integration as rake test:valgrind by @Watson1978 in #426
- Add Valgrind memcheck CI workflow by @Watson1978 in #427
- Use rb_range_values() to dump a Range instead of struct slots for Ruby 4.1 by @Watson1978 in #429
- Fix heap out-of-bounds read and write after the Ox::Builder depth raise by @Watson1978 in #430
- Fix memory leaks on parse error paths, the SAX element stack, and the intern cache by @Watson1978 in #428
- Fix rake test_all silently skipping most of the test suite by @Watson1978 in #431
- Add a 20 minute timeout to the CI and Valgrind jobs by @Watson1978 in #432
- Fix memory leak of the object-mode circular reference table by @Watson1978 in #433
- Limit the CI workflows to a read-only token and stop persisting it by @Watson1978 in #436
- Fix hash flooding by seeding the name cache hash per process by @Watson1978 in #435
- Fix out-of-bounds heap write and read in the circular reference table by @Watson1978 in #434
- Fix SEGV when dumping a Time localtime() can not represent by @Watson1978 in #437
- Fix the out-of-bounds read and write in the base64 decode by @Watson1978 in #439
- Fix the name cache pointer held across callbacks and the unchecked allocations by @Watson1978 in #440
- Fix Ox.load_file sizing the read from whatever the path reports by @Watson1978 in #441
- Fix the thin time format losing times before 1970 and after 2038 by @Watson1978 in #438
- Fix SEGV when an object mode container is not what end_element expects by @Watson1978 in #442
- Fix the heap overflow and the stale element name in dump_gen_element by @Watson1978 in #443
- Fix the sample XML files carrying what look like real passwords by @Watson1978 in #444
- Fix the double free of the hash mode mark list by @Watson1978 in #445
- Fix the SAX parser reading uninitialised memory after EOF on a file by @Watson1978 in #447
- Fix a document being able to switch a default Ox.load into object mode by @Watson1978 in #448
- Fix buffer over-read of an Ox::Builder element name that holds a NUL by @Watson1978 in #449
- Fix a CDATA value being able to close its own section by @Watson1978 in #450
- Fix the builder output buffer being freed with the wrong allocator by @Watson1978 in #451
- Fix Ox.load_file failing on Windows for files ox wrote itself by @Watson1978 in #452
- Remove the dead buf_reset() from the builder's buf.h by @Watson1978 in #453
- Fix a :nest_ok comment being dropped inside an :off element by @Watson1978 in #454
- Fix parse_regexp building a pointer before the start of its text by @Watson1978 in #455
- Fix the xsd dateTime conversion discarding the timezone offset by @Watson1978 in #456
- Fix a loaded Regexp ignoring the document's encoding by @Watson1978 in #457
- Fix Ox::Builder truncating a value at an embedded NUL by @Watson1978 in #458
- Fix an encoding set in Ox.default_options never being cleared by @Watson1978 in #459
- Fix a Symbol name being truncated at an embedded NUL by @Watson1978 in #461
- Fix the arity -1 entry points reading past their arguments by @Watson1978 in #462
- Fix a slash in a Regexp pattern coming back escaped by @Watson1978 in #463
- Fix a rescued raise leaving part of the value in the buffer by @Watson1978 in #465
- Fix :invalid_replace having no effect unless :effort is moved by @Watson1978 in #466
- Fix Ox::Builder counting more than it writes, and to_s writing to the buffer by @Watson1978 in #467
- Fix a comment, CDATA, DOCTYPE or instruction value going out unchecked by @Watson1978 in #468
- Fix an element or attribute name going out unchecked by @Watson1978 in #470
- Speed up Ox.dump by not type checking the same String twice by @Watson1978 in #471
Full Changelog: v2.14.28...v2.14.29