m4-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: hash table allocation failure


From: Eric Blake
Subject: Re: hash table allocation failure
Date: Thu, 25 Jun 2009 21:19:46 -0600
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.22) Gecko/20090605 Thunderbird/2.0.0.22 Mnenhy/0.7.6.666

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

According to Eric Blake on 6/20/2009 3:19 PM:
> According to Eric Blake on 6/15/2009 9:25 PM:
>> Thanks to Jim's recent work on the gnulib hash module, I audited the code
>> for cases where allocation failure could cause assertion failures instead
>> of expected xalloc_die behavior
> 
> Now that gnulib memory handling bugs are fixed, I'm committing this followup:

And taking a leaf from gnulib, it is more readable to write hash routines
like this:

- --
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkpEPlIACgkQ84KuGfSFAYCKxwCfVPpjwvlaqNiHqwTdX9Xw9tMh
cQgAn2vhuenMVS4YkHcKIKG19oi5HlTW
=bEpP
-----END PGP SIGNATURE-----
>From 891a0fd44d0666fc0576071ec9866cb2b87490eb Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Thu, 25 Jun 2009 12:08:25 -0600
Subject: [PATCH] Use bitrotate for hashing.

* gnulib: Update to latest.
* m4/gnulib-cache.m4: Import bitrotate module.
* src/symtab.c (hash): Use it.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog          |    5 +++++
 gnulib             |    2 +-
 m4/gnulib-cache.m4 |    3 ++-
 src/symtab.c       |    3 ++-
 4 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4dac1a0..69321da 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2009-06-25  Eric Blake  <address@hidden>

+       Use bitrotate for hashing.
+       * gnulib: Update to latest.
+       * m4/gnulib-cache.m4: Import bitrotate module.
+       * src/symtab.c (hash): Use it.
+
        Fix description of limits on diversions.
        * doc/m4.texinfo (Diversions): Fix grammar.  Be less pessimistic
        about limitations.
diff --git a/gnulib b/gnulib
index 12f78b4..836f397 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 12f78b4faa14cd2da952f865979843dee79fcf93
+Subproject commit 836f3974faad2f3de7bafd46719b77d6632a4c96
diff --git a/m4/gnulib-cache.m4 b/m4/gnulib-cache.m4
index d3e4d73..3db1a44 100644
--- a/m4/gnulib-cache.m4
+++ b/m4/gnulib-cache.m4
@@ -15,7 +15,7 @@


 # Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=. --local-dir=local --lib=libm4 
--source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests 
--aux-dir=build-aux --with-tests --no-libtool --macro-prefix=M4 announce-gen 
assert autobuild avltree-oset binary-io clean-temp cloexec close-stream closein 
config-h dirname error execute fdl-1.3 fflush filenamecat flexmember fopen 
fopen-safer freadptr freadseek fseeko gendocs getopt git-version-gen 
gnumakefile gnupload gpl-3.0 hash intprops maintainer-makefile memchr2 memcmp2 
memmem mkstemp obstack obstack-printf-posix pipe progname quote regex rename 
snprintf-posix stdbool stdint stdlib-safer strtod strtol unlocked-io 
vasnprintf-posix verror version-etc version-etc-fsf wait-process xalloc 
xmemdup0 xprintf xvasprintf-posix
+#   gnulib-tool --import --dir=. --local-dir=local --lib=libm4 
--source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests 
--aux-dir=build-aux --with-tests --no-libtool --macro-prefix=M4 announce-gen 
assert autobuild avltree-oset binary-io bitrotate clean-temp cloexec 
close-stream closein config-h dirname error execute fdl-1.3 fflush filenamecat 
flexmember fopen fopen-safer freadptr freadseek fseeko gendocs getopt 
git-version-gen gnumakefile gnupload gpl-3.0 hash intprops maintainer-makefile 
memchr2 memcmp2 memmem mkstemp obstack obstack-printf-posix pipe progname quote 
regex rename snprintf-posix stdbool stdint stdlib-safer strtod strtol 
unlocked-io vasnprintf-posix verror version-etc version-etc-fsf wait-process 
xalloc xmemdup0 xprintf xvasprintf-posix

 # Specification in the form of a few gnulib-tool.m4 macro invocations:
 gl_LOCAL_DIR([local])
@@ -25,6 +25,7 @@ gl_MODULES([
   autobuild
   avltree-oset
   binary-io
+  bitrotate
   clean-temp
   cloexec
   close-stream
diff --git a/src/symtab.c b/src/symtab.c
index 338bf17..dd9eb67 100644
--- a/src/symtab.c
+++ b/src/symtab.c
@@ -33,6 +33,7 @@

 #include "m4.h"

+#include "bitrotate.h"
 #include "hash.h"

 #ifdef DEBUG_SYM
@@ -112,7 +113,7 @@ hash (const char *s, size_t len)
   /* This algorithm was originally borrowed from GNU Emacs, but has
      been modified to allow embedded NUL.  */
   while (len--)
-    val = (val << 7) + (val >> (sizeof val * CHAR_BIT - 7)) + to_uchar (*s++);
+    val = rotl_sz (val, 7) + to_uchar (*s++);
   return val;
 }

-- 
1.6.3.3.334.g916e1


reply via email to

[Prev in Thread] Current Thread [Next in Thread]