Revision history for Perl extension Class-XSAccessor.

1.19_01 - 2026-10-10

  - Fix Class::XSAccessor::Array method installation: ensure getters and
    predicates are not accidentally overwritten as read-write accessors.
  - Use key length comparison and memcmp instead of strcmp in hash registry
    to prevent key aliasing on embedded NUL bytes and improve lookup speed;
    eliminate redundant key re-allocation on shared hash keys and enforce
    bounded key copy in hash table storage (XSA-04, XSA-05).
  - Safe package stash resolution and invocant validation in constructors:
    use gv_stashsv to support full package names, validate that invocants
    are defined and blessed (if references), and check for NULL stash (XSA-11).
  - Validate hash key length against I32 limits to prevent integer wrapping
    and buffer overflows with excessive key lengths (XSA-05).
  - Normalize old package separator (') to (::) in subroutine names and
    package parameters, and reject subroutine names containing embedded
    NUL bytes in both Perl and XS layers (XSA-03).
  - Validate array index bounds (must be 0..10_000_000) to prevent negative
    index out-of-bounds access, realloc(0) deallocation, and excessive
    memory allocation, with portable IVdf error formatting (XSA-02).
  - B::C compatibility fix (thanks, Todd Rinaldo)
  - Clean up macros (thanks, Nicolas R)
  - Re-enable erroneously disabled test (thanks, Peter Rabbitson)

1.19 - 2013-11-22
  - Require Time::HiRes explicitly because CentOS cripples the base
    perl install.
  - Simplify entersub optimization (chocolateboy)

1.18 - 2013-06-17
  - Revert fixes for implicitly-lvalue getters for now since that
    actually breaks user code. It seems it's not just because the
    users are naughty, so more investigation required.

1.17 - 2013-06-17
  - For Hashes: Implement predicates that check definedness and
    existance explicitly. The traditional "predicates" check
    definedness. It's conceivable to also want a bool-check
    type predicate. File a ticket if you need that.
  - Fix bug regarding getters being implicitly lvalue by
    returning the internal SV*. Instead, we now use TARG.

1.16 - 2012-11-05
  - Drop erroneous MYMETA files from distribution.

1.15 - 2012-11-04
  - Support for hash keys with NUL (\0) characters. Previously,
    these were truncated.

1.14 - 2012-08-26
  - Skip some failing tests on old debugging perls. Guys, please
    upgrade your perl!

1.13 - 2011-12-12
  - Promotes 1.12_03 to a stable release.

1.12_03 - 2011-12-09
  - Fix for unthreaded perls (broken in 1.12_02).

1.12_02 - 2011-12-07
  - Removes the cached read-only and read-write accessors
    for the time being. (These were only available from another
    development release.
  - Much more brutal thread-safety testing.
  - Fixed thread-safety problem with the global hashkey storage.
  - Lots of refactoring in the C code.
  - Instead of storing an index in the CV, we store a pointer to
    the hashkey struct.

1.12_01 - 2011-11-29
  - Implements cached read-only and read-write accessors.
    Details on what that means are in the documentation.

1.12 - 2011-09-04
  - Reclaim compatibility with the most recent versions of
    ExtUtils::ParseXS.
  - Explicit tests for wrong-type invocants.

1.11 - 2010-12-03
  - Fix assignment to lvalue accessors that
    point at an uninitialized hash element.

1.10 - 2010-12-01
  - Fix RT #63458 and potentially #50454
    We don't occasionally crash during END any more.
    Instead, we rely on the OS to reap a bit of memory after
    perl was shut down anyway.
  - Tiny refactoring for smaller object size.

1.09 - 2010-10-31
  - Fix #62531: Predicates return value, not bool (SJOHNSTON)
  - TODO test for perl-crashing bug (in perl) that can happen
    on (arcane) XSUB aliasing on perls < 5.8.9 (Peter Rabbitson)
    We're open for work-around patches.

1.08 - 2010-09-17
  - Promote latest development release to a stable release.

1.07_04 - 2010-09-12
  - Since WIN32 doesn't have the PERL_CORE optimization,
    it gets the PERL_NO_GET_CONTEXT optimization back.
  - Add threading test that would previously crash on win32
    and perls compiled with track-mempool.
  - Use the system's malloc/etc for the shared memory, not perl's.

1.07_03 - 2010-09-09
  - Minor constructor optimization/cleanup.
  - Various built-time warning fixes.
  - PERL_CORE optimization now disabled on WIN32.
  - Class::Accessor::Fast compatibility code added (not
    for public consumption!)
  - Clear requirement of Perl 5.8 everywhere.
  - Fix minor (constant as in O(1)) memory leak.

1.07_02 - 2010-08-23
  - Various warning fixes and small cleanups over previous
    dev. version.

1.07_01 - 2010-08-18
  - Experimental support for lvalue accessors:
    $obj->foo = 12

1.07 - 2010-08-15
  - Include two new test files for the fix in 1.06.
  - Define PERL_CORE, but *only* while including XSUB.h to get
    a significant speed-up (see XSAccessor.xs for an explanation).
    Idea from chocolateboy. Complaints from rightfully annoyed
    perl5-porters (in particular but not limited to Nicholas)
    go to Steffen.

1.06 - 2010-08-14
  - Add sanity checks to make sure we don't segfault on
    invalid invocants (chocolateboy)

1.05 - 2009-11-15
  - Minor developer doc tweaks.
  - Minor XS refactoring

1.04_05 - 2009-11-09
  - Fixes for perls < 5.10:
    => No entersub optimization
    => Do no use precalculated hashes
  - Updated entersub optimization
  - Remove brain-damaged double-hashing
  - Minor portability fixlets

1.04_04 - 2009-11-05
  - Fixes for non-threaded perls
    (no need for locks, perl_mutex not even defined).

1.04_03 - 2009-11-03
  ** This release features some very radical changes. Test well. **
  - Replace use of perl hashes in the global hash key name storage with
    a full-blown, separate implementation of a hash table
    (Steffen, chocolateboy)
  - Similarly, throw out the SV's for simple C strings.
  - Add a global lock for all modifications to global data structures:
  - The above three items fix RT #50454 (serious threading issues).
  - Add support for alternate use Class::XSAccessor { ... } syntax
    (Adam K)

1.04_02 - 2009-09-07
  ** This release features some very radical changes. Test well. **
  - Significant optimization by replacing the relevant entersub ops
    with stripped down versions (chocolateboy)

1.04_01 - 2009-09-07
  ** This release features some very radical changes. Test well. **
  - More aggressive OPTIMIZE flags if possible (chocolateboy)
  - Added shorthand syntax for getters, setters, accessors, and predicates
    where the attribute has the same name as the method (chocolateboy)
  - Remove dependency on AutoXS::Header.
  - Merge Class::XSAccessor::Array into this distribution.
  - Refactored the XS to remove duplicate code.
  - Refactored the perl code in XSAccessor.pm and Array.pm to remove
    duplicate code (=> Heavy.pm).
  - Upgrade Devel::PPPort/ppport.h (chocolateboy)

1.04 - 2009-06-11
  - Fix a bunch of warnings thanks to a heads up from
    Marcela Maslanova.

1.03 - 2009-05-31
  - Upgrade to AutoXS::Header 1.01: Make it C89!

1.02 - 2009-05-17
  - Require new AutoXS header version in order to fix
    prototyping issue.

1.01 - 2009-05-16
  - XS boolean constants for PPI

1.00 - 2009-05-16
  - Implement new caching algorithm: Only recreate
    the int => hash key association for new hash keys.

0.14 - 2008-12-09
  - Fix Makefile issue on Windows using nmake (Petar Shangov)

0.13 - 2008-12-04
  - Add predicate tests
  - Fix some compiler warnings (Tom Heady)

0.12 - 2008-12-02
  - Compilation fix for Solaris cc. (Probably going half-way only.)

0.11 - 2008-11-29
  - Forgot to add more tests in previous release.

0.10 - 2008-11-29
  - Add generation of constructors.

0.09 - 2008-11-29
  - Add the class option to set the target class.

0.08 - 2008-11-21
  - Reduce code duplication.
  - Fix for compilation issues on Solaris with Sun's cc.

0.07 - 2008-08-29
  - Documented the "replace" option.
  - Added the "chained" option to generate chainable setters
    and mutators.

0.06 - 2008-08-28
  - Copy input scalars on setter/mutator calls (RT #38573)

0.05 - 2008-06-21
  - Add read/write accessors. (chocolateboy)
  - By default, return the new value from setters. (chocolateboy)
  - Add predicates, i.e. "has_foo".

0.04 - 2008-05-03
  - Win32 support.

0.03 - 2008-05-03
  - Refer to Class::XSAccessor::Array for array based objects.

0.02 - 2008-04-03
  - Mention in the docs that fully qualified method names are
          supported.

0.01 - 2008-04-03
  - original version as uploaded to CPAN.
