diff options
-rw-r--r-- | sci-mathematics/gap/files/gap-4.13.1-more-hash-fixes.patch | 50 | ||||
-rw-r--r-- | sci-mathematics/gap/gap-4.13.1-r2.ebuild (renamed from sci-mathematics/gap/gap-4.13.1-r1.ebuild) | 5 |
2 files changed, 54 insertions, 1 deletions
diff --git a/sci-mathematics/gap/files/gap-4.13.1-more-hash-fixes.patch b/sci-mathematics/gap/files/gap-4.13.1-more-hash-fixes.patch new file mode 100644 index 000000000000..5a464a0fda49 --- /dev/null +++ b/sci-mathematics/gap/files/gap-4.13.1-more-hash-fixes.patch @@ -0,0 +1,50 @@ +From 19484a75098d43e75e3facfdd05dccefc358e43f Mon Sep 17 00:00:00 2001 +From: Max Horn <max@quendi.de> +Date: Fri, 11 Oct 2024 14:54:29 +0200 +Subject: [PATCH] Fix hashing for integer plists (#5807) + +--- + lib/dicthf.gi | 2 +- + tst/testbugfix/2024-10-11-orbit-hash.tst | 20 ++++++++++++++++++++ + 2 files changed, 21 insertions(+), 1 deletion(-) + create mode 100644 tst/testbugfix/2024-10-11-orbit-hash.tst + +diff --git a/lib/dicthf.gi b/lib/dicthf.gi +index e4349ac940..119d5329f6 100644 +--- a/lib/dicthf.gi ++++ b/lib/dicthf.gi +@@ -164,7 +164,7 @@ function(m, v) + if not IsPlistRep(x) then + x := AsPlist(x); + fi; +- return HashKeyWholeBag(x, 1); ++ return HashKeyBag(x, 1, 0, Length(x) * GAPInfo.BytesPerVariable); + end; + + # alternative code w/o HashKeyBag +diff --git a/tst/testbugfix/2024-10-11-orbit-hash.tst b/tst/testbugfix/2024-10-11-orbit-hash.tst +new file mode 100644 +index 0000000000..3735537e6f +--- /dev/null ++++ b/tst/testbugfix/2024-10-11-orbit-hash.tst +@@ -0,0 +1,20 @@ ++# Fix a bug reported by Leonard Soicher caused by a bug in ++# the hash function for lists of small positive integers. ++gap> n:=280;; ++gap> G:=OnePrimitiveGroup(NrMovedPoints,n,Size,604800*2); ++J_2.2 ++gap> blocks := [ [ 1, 2, 3, 28, 108, 119, 155, 198, 216, 226 ], ++> [ 1, 2, 3, 118, 119, 140, 193, 213, 218, 226 ] ];; ++gap> Append(blocks[2],[1..1000]); for i in [1..1000] do Remove(blocks[2]); od; ++gap> Append(blocks[2],[1..1000]); for i in [1..1000] do Remove(blocks[2]); od; ++gap> ForAll(blocks,IsSet); ++true ++gap> orb1:=Orbit(G,blocks[1],OnSets);; ++gap> Length(orb1); ++12096 ++gap> orb2:=Orbit(G,blocks[2],OnSets);; ++gap> Length(orb2); ++1008 ++gap> orbs:=Orbits(G,blocks,OnSets);; ++gap> List(orbs,Length); # this code gave wrong results ++[ 12096, 1008 ] diff --git a/sci-mathematics/gap/gap-4.13.1-r1.ebuild b/sci-mathematics/gap/gap-4.13.1-r2.ebuild index 45cb0c98749e..49b0fd13f52a 100644 --- a/sci-mathematics/gap/gap-4.13.1-r1.ebuild +++ b/sci-mathematics/gap/gap-4.13.1-r2.ebuild @@ -65,7 +65,10 @@ RDEPEND="${DEPEND}" # packages, use package.provided. PDEPEND="${REQUIRED_PKGS} !minimal? ( ${AUTOLOADED_PKGS} )" -PATCHES=( "${FILESDIR}/gap-4.13.1-hash-fixes.patch" ) +PATCHES=( + "${FILESDIR}/gap-4.13.1-hash-fixes.patch" + "${FILESDIR}/gap-4.13.1-more-hash-fixes.patch" +) pkg_setup() { if use valgrind; then |