In perl.git, the branch nicholas/hv_h_split has been created
<http://perl5.git.perl.org/perl.git/commitdiff/30028c3753f53c83a8acb2988d1d96835409dbdd?hp=0000000000000000000000000000000000000000>
at 30028c3753f53c83a8acb2988d1d96835409dbdd (commit)
- Log -----------------------------------------------------------------
commit 30028c3753f53c83a8acb2988d1d96835409dbdd
Author: Nicholas Clark <[email protected]>
Date: Thu Feb 21 10:25:37 2013 +0100
Move xhv_rand from the main HV structure to struct hv_aux.
Unconditionally initialise xhv_rand when the aux structure is created, and
unconditionally reset it when the aux structure is copied as part of hash
expansion.
This avoids increasing the size of every hash in order to store state only
related to iteration.
M hv.c
M hv.h
commit dc6a8a5bf5752f208c04eb06b450c404230dae07
Author: Nicholas Clark <[email protected]>
Date: Wed Feb 20 20:39:31 2013 +0100
Use the addresses of the hash and the chain head to permute hash insertion.
Use these instead of HvRAND(), so that HvRAND() and its associated storage
are not required until hash iteration time.
M hv.c
commit 525207d7d5489a400b4018af91aa0cb85399b5b8
Author: Nicholas Clark <[email protected]>
Date: Wed Feb 20 20:38:47 2013 +0100
XXX Update EU::MM patch to make BSD makes happy. Again, this should be
merged.
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
commit 534dc521ec23f972804c3b14d8176fd22bde7463
Author: Nicholas Clark <[email protected]>
Date: Wed Feb 20 17:00:20 2013 +0100
XXX Update comment - this really should be merged into the appropriate
commit
M hv.c
commit 12443749595e38089abf4023b612ad0b161cfce8
Author: Yves Orton <[email protected]>
Date: Wed Feb 20 07:33:49 2013 +0100
Do not hard code the list of perl header files - discover them from disk
instead
Includes a version bump to all the EU::MM files (to prevent any possible
$VERSION consistency checks from failing like they would on *nix)
This patch will be submitted to the EU::MM project in a modified form
and once merged there should replace these changes
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm
commit 5a3ed4551132f537a9b52cf3c6b0289954b47a09
Author: Yves Orton <[email protected]>
Date: Tue Feb 19 13:25:53 2013 +0100
semi-Randomize hash insertion order
M hv.c
commit cd8ea4c931e56af6a11e0b3c8b56e90ef12971e1
Author: Yves Orton <[email protected]>
Date: Tue Feb 19 12:14:44 2013 +0100
Ensure that Module::Pluggable returns plugins in a predictable order
As of 5.18 hash traversal order will vary per-hash, and indeed more
frequently. The likelihood this results in one of the tests in M::P
failing becomes very high.
In general the test expectations were fragile, but probably almost
never failed. With hash traversal randomization they will fail
regularly.
Note the use a temporary array in part of this patch is because
sort in scalar context is undefined.
M cpan/Module-Pluggable/lib/Module/Pluggable.pm
M cpan/Module-Pluggable/lib/Module/Pluggable/Object.pm
M cpan/Module-Pluggable/t/19can_ok_clobber.t
commit 84a682fcfdd13fbad38286520d44aecf2401d4f6
Author: Yves Orton <[email protected]>
Date: Tue Feb 19 12:12:34 2013 +0100
Fix code which modifies a hash while each()ing over it
It has never been correct to modify a hash during traversal by each().
In older perls this was unlikely to break the tests. In newer perls
it is relatively likely, and in 5.18 it will be almost certain.
This includes a version bump. Needs to be merged upstream.
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
M cpan/ExtUtils-MakeMaker/t/basic.t
commit f2f4bb75287eac697c95d8c3d9b5102e6f487d1b
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 16:13:08 2013 +0100
reset HvRAND() every hsplit, and properly rotate the bucket_rand. :-)
M hv.c
commit 7dc0643f00c0ea60c44f46a62f8fb50cba93d9e5
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 10:18:48 2013 +0100
randomize bucket split insertion in hsplit()
M hv.c
commit 665161637de010a41c844ee87c0234f15c8ba70f
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 09:36:35 2013 +0100
turn the ptr_hash inline code into a true sub
Borrowed from autobox, which is released under the same terms as Perl.
M embed.fnc
M embed.h
M hv.c
M proto.h
commit 33b216f977ce304c628d9a6dea17e920b53304be
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 08:11:18 2013 +0100
Enable hash traversal order randomization
This patch causes Perl to use a random order per hash when traversing
hashes via keys(), values() and each().
The random order is determined by add a new property xhv_rand to struct
xpvhv. This property
is calculated on per traverse of the hash by using a pointer/integer hash
function on the
address of the bucket array, and then XORing it with the bucket index
counter during traverse.
This causes each hash to have a different order for traversing the buckets.
The purpose of this change is to make hash seed discovery attacks harder.
An attacker loses
a lot of information when the keys are "randomized".
M hv.c
M hv.h
M t/op/smartkve.t
commit b637573230f68d9a73a7c43767d5560f28084a10
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 07:56:25 2013 +0100
Fix test fails due to hash traversal randomization
One cannot assume two hashes with the same keys will have the
the same key order. And after hash traversal randomization one
can assume they WONT.
M cpan/Pod-Simple/t/closeys.t
commit 3696db0e50a0ef1f9da47d709c7da6055318d7ae
Author: Yves Orton <[email protected]>
Date: Mon Feb 18 06:37:29 2013 +0100
Fix tests that fail due to hash traversal randomization
One cannot assume two hashes with the same keys will have the
the same key order. And after hash traversal randomization one
can assume they WONT.
M cpan/JSON-PP/t/019_incr.t
commit 80776f6b4abcb63295f6d3fe95e7e86c0d93bf4e
Author: Yves Orton <[email protected]>
Date: Sun Feb 17 16:39:23 2013 +0100
Fix failing porting tests by bumping version number and tweaking pod
M ext/Hash-Util/lib/Hash/Util.pm
commit e26e548c4ae75c6a58ae2846ac6ee9d20116d593
Author: Yves Orton <[email protected]>
Date: Tue Feb 12 05:06:48 2013 +0100
default to PERL_FUNC_ONE_AT_A_TIME_HARD for all builds
For testing, but maybe for ever
M hv_func.h
commit babd5ad72c62d0f53be92d0405bbba1e68b99e2d
Author: Yves Orton <[email protected]>
Date: Mon Feb 11 19:33:00 2013 +0100
Remove XXHash (for now)
For some reason I could never get it working anyway, due to strange
segfaults that I did not have the time to track down.
M hv_func.h
commit 1db2fe73cb9940737dd7613a06f20ce0b56061db
Author: Yves Orton <[email protected]>
Date: Mon Jan 21 17:11:31 2013 +0100
random tweaks
M hv_func.h
commit 2d013258101fc0e7464c70ea921e83a5a4a2fa37
Author: Yves Orton <[email protected]>
Date: Wed Dec 12 00:13:53 2012 +0100
fixup wording
M ext/Hash-Util/lib/Hash/Util.pm
commit 84f0f6422b26dbd0ee88bbe9d8f3696dd63380ea
Author: Yves Orton <[email protected]>
Date: Tue Dec 11 23:46:37 2012 +0100
add a "hash quality score" to Hash::Util::bucket_stats()
M ext/Hash-Util/lib/Hash/Util.pm
commit 0094c9e2e7c30b9248085625ade8b529a8d5c06b
Author: Yves Orton <[email protected]>
Date: Tue Dec 11 08:50:58 2012 +0100
Attempt to eliminate a signed mistmatch in comparison warning
as far as I can tell 'i' can only be positive here.
M hv_func.h
commit 09d09deb98d4152255a52632447d60a12becf9fa
Author: Yves Orton <[email protected]>
Date: Mon Dec 10 09:43:59 2012 +0100
include missing headers so XS modules rebuild when they change
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm
M cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm
commit 2ae38f851519dd1b092d70b67691b8b82705ed2d
Author: Yves Orton <[email protected]>
Date: Mon Dec 10 08:36:43 2012 +0100
add a hardened one-at-a-time hash variant
Mix in additional randomness into the final value.
M hv_func.h
commit 216cb225110fc9adc2f54e18b2df7f9623290e21
Author: Yves Orton <[email protected]>
Date: Mon Dec 10 00:40:43 2012 +0100
add xxhash
M hv_func.h
commit 16c83c7455ecac292dfb0b9b5f6de36449ade795
Author: Yves Orton <[email protected]>
Date: Sun Dec 9 17:01:46 2012 +0100
Split out hash functions into new file and turn into inline static functions
This includes various tweaks related to building SipHash.
M Cross/Makefile-cross-SH
M MANIFEST
M Makefile.SH
M Makefile.micro
M NetWare/Makefile
M configpm
M hv.h
A hv_func.h
M win32/Makefile
M win32/Makefile.ce
commit 23ac4b7526e9646cd73e2fc32917b65525be9bd0
Author: Yves Orton <[email protected]>
Date: Sat Dec 8 16:26:01 2012 +0100
remove toy code
M hv.h
commit 4955626a17a7b8bc8470b1b70ee6755cbdeb63b5
Author: Yves Orton <[email protected]>
Date: Sat Dec 8 16:24:06 2012 +0100
remove unused define
M hv.h
commit b9cf7e8932843f09df57a0cbaeececc637d8f34c
Author: Nicholas Clark <[email protected]>
Date: Wed Feb 20 21:38:33 2013 +0100
Abolish STRANGE_MALLOC. Now all malloc()s are considered strange :-)
STRANGE_MALLOC was added in 5.002 beta 1 (4633a7c4bad06b47) as part of an
work around for typical mallocs, which had a bad interaction with perl's
allocation needs. Specifically, repeatedly extending an array and then
creating SV heads (such as when reading lines of a file into an array)
could end up with each reallocation for the array being unable to extend in
place, needing a fresh chunk of memory, and the released memory not being
suitable for use as more SV heads, so sitting unused. The solution was for
perl to recycle the old array body as SV heads, instead of returning it to
the system, passing the memory from the the AV code to the SV code using
offer_nice_chunk(), PL_nice_chunk and PL_nice_chunk_size.
STRANGE_MALLOC was actually a signal that the malloc() didn't need
protecting from itself, and to disable the work around.
offer_nice_chunk(), PL_nice_chunk and PL_nice_chunk_size were removed by
commit 9a87bd09eea1d037 in Nov 2010, without any ill effects, hence the
code used when STRANGE_MALLOC was *not* defined is essentially doing extra
work for no benefits.
From the lack of problems reported, one can assume that in the intervening
15 years malloc technology has got significantly improved, and it is
probably
better to be honest with it, rather than trying to second guess it.
Hence remove all the non-STRANGE_MALLOC code, and leave everyone using the
much simpler code. See also
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2005-11/msg00495.html
http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2013-01/msg00126.html
M av.c
M hv.c
-----------------------------------------------------------------------
--
Perl5 Master Repository