[Pkg-gnutls-commits] r1740 - in /packages/p11-kit/branches/experimental/debian: changelog patches/series patches/update_to_MurmurHash3.diff

ametzler at users.alioth.debian.org ametzler at users.alioth.debian.org
Tue Apr 2 17:55:07 UTC 2013


Author: ametzler
Date: Tue Apr  2 17:55:07 2013
New Revision: 1740

URL: http://svn.debian.org/wsvn/pkg-gnutls/?sc=1&rev=1740
Log:
p11-kit 0.17.4-3 experimental

[update_to_MurmurHash3.diff] fix FTBFS on armel (verified) and sparc.

Added:
    packages/p11-kit/branches/experimental/debian/patches/update_to_MurmurHash3.diff
Modified:
    packages/p11-kit/branches/experimental/debian/changelog
    packages/p11-kit/branches/experimental/debian/patches/series

Modified: packages/p11-kit/branches/experimental/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnutls/packages/p11-kit/branches/experimental/debian/changelog?rev=1740&op=diff
==============================================================================
--- packages/p11-kit/branches/experimental/debian/changelog (original)
+++ packages/p11-kit/branches/experimental/debian/changelog Tue Apr  2 17:55:07 2013
@@ -1,8 +1,8 @@
-p11-kit (0.17.4-3) UNRELEASED; urgency=low
-
-  * NOT RELEASED YET
-
- -- Andreas Metzler <ametzler at debian.org>  Tue, 26 Mar 2013 19:37:51 +0100
+p11-kit (0.17.4-3) experimental; urgency=low
+
+  * [update_to_MurmurHash3.diff] fix FTBFS on armel (verified) and sparc.
+
+ -- Andreas Metzler <ametzler at debian.org>  Tue, 02 Apr 2013 19:38:34 +0200
 
 p11-kit (0.17.4-2) experimental; urgency=low
 

Modified: packages/p11-kit/branches/experimental/debian/patches/series
URL: http://svn.debian.org/wsvn/pkg-gnutls/packages/p11-kit/branches/experimental/debian/patches/series?rev=1740&op=diff
==============================================================================
--- packages/p11-kit/branches/experimental/debian/patches/series (original)
+++ packages/p11-kit/branches/experimental/debian/patches/series Tue Apr  2 17:55:07 2013
@@ -1,2 +1,3 @@
 enable_locale.diff
 murmurtest_bigendian.diff
+update_to_MurmurHash3.diff

Added: packages/p11-kit/branches/experimental/debian/patches/update_to_MurmurHash3.diff
URL: http://svn.debian.org/wsvn/pkg-gnutls/packages/p11-kit/branches/experimental/debian/patches/update_to_MurmurHash3.diff?rev=1740&op=file
==============================================================================
--- packages/p11-kit/branches/experimental/debian/patches/update_to_MurmurHash3.diff (added)
+++ packages/p11-kit/branches/experimental/debian/patches/update_to_MurmurHash3.diff Tue Apr  2 17:55:07 2013
@@ -1,0 +1,289 @@
+From 0434aa3ee8f794628d9e10c90442236bbe6d0ead Mon Sep 17 00:00:00 2001
+From: Stef Walter <stefw at gnome.org>
+Date: Tue, 2 Apr 2013 16:33:24 +0200
+Subject: [PATCH] Update to MurmurHash3
+
+This should also fix problems with accessing memory in a non-aligned
+fashion on platforms where this causes problems.
+
+https://bugs.freedesktop.org/show_bug.cgi?id=62819
+---
+ common/attrs.c           |   2 +-
+ common/dict.c            |   2 +-
+ common/hash.c            | 149 +++++++++++++++++++++++++----------------------
+ common/hash.h            |   4 +-
+ common/tests/test-hash.c |  18 +++---
+ 5 files changed, 91 insertions(+), 84 deletions(-)
+
+diff --git a/common/attrs.c b/common/attrs.c
+index e656189..c1e060a 100644
+--- a/common/attrs.c
++++ b/common/attrs.c
+@@ -505,7 +505,7 @@ p11_attr_hash (const void *data)
+ 	const CK_ATTRIBUTE *attr = data;
+ 	uint32_t hash;
+ 
+-	p11_hash_murmur2 (&hash,
++	p11_hash_murmur3 (&hash,
+ 	                  &attr->type, sizeof (attr->type),
+ 	                  attr->pValue, (size_t)attr->ulValueLen,
+ 	                  NULL);
+diff --git a/common/dict.c b/common/dict.c
+index 409e3a4..db7b575 100644
+--- a/common/dict.c
++++ b/common/dict.c
+@@ -329,7 +329,7 @@ unsigned int
+ p11_dict_str_hash (const void *string)
+ {
+ 	uint32_t hash;
+-	p11_hash_murmur2 (&hash, string, strlen (string), NULL);
++	p11_hash_murmur3 (&hash, string, strlen (string), NULL);
+ 	return hash;
+ }
+ 
+diff --git a/common/hash.c b/common/hash.c
+index 2041f1f..9fe3668 100644
+--- a/common/hash.c
++++ b/common/hash.c
+@@ -541,70 +541,69 @@ p11_hash_md5 (unsigned char *hash,
+ 	md5_invalidate (&md5);
+ }
+ 
+-/*
+- *  MurmurHash.c
+- *  MYUtilities
+- *
+- *  This file created by Jens Alfke on 3/17/08.
+- *  Algorithm & source code by Austin Appleby, released to public domain.
+- *  <http://murmurhash.googlepages.com/>
+- *  Downloaded 3/16/2008.
+- *  Modified slightly by Jens Alfke (use standard uint32_t and size_t types;
+- *  change 'm' and 'r' to #defines for better C compatibility.)
++/* This code is based on the public domain MurmurHash3 from Austin Appleby:
++ * http://code.google.com/p/smhasher/source/browse/trunk/MurmurHash3.cpp
+  *
++ * We use only the 32 bit variant, and slow it down a bit to support unaligned
++ * reads.
+  */
+ 
+-/*-----------------------------------------------------------------------------
+- * MurmurHash2, by Austin Appleby
+- *
+- * Note - This code makes a few assumptions about how your machine behaves -
+- *
+- * 1. We can read a 4-byte value from any address without crashing
+- * 2. sizeof(int) == 4      **Jens: I fixed this by changing 'unsigned int' to 'uint32_t'**
+- *
+- * And it has a few limitations -
+- *
+- * 1. It will not work incrementally.
+- * 2. It will not produce the same results on little-endian and big-endian
+- *    machines.
++#if !defined(__cplusplus) && (__GNUC__ > 2)
++#define GNUC_INLINE __attribute__((always_inline))
++#else
++#define GNUC_INLINE
++#endif
++
++GNUC_INLINE static inline uint32_t
++rotl (uint32_t x,
++      int8_t r)
++{
++	return (x << r) | (x >> (32 - r));
++}
++
++/*
++ * Finalization mix - force all bits of a hash block to avalanche
+  */
+ 
++GNUC_INLINE static inline uint32_t
++fmix (uint32_t h)
++{
++	h ^= h >> 16;
++	h *= 0x85ebca6b;
++	h ^= h >> 13;
++	h *= 0xc2b2ae35;
++	h ^= h >> 16;
++
++	return h;
++}
++
++
+ void
+-p11_hash_murmur2 (void *hash,
++p11_hash_murmur3 (void *hash,
+                   const void *input,
+                   size_t len,
+                   ...)
+ {
+-	/*
+-	 * 'm' and 'r' are mixing constants generated offline.
+-	 * They're not really 'magic', they just happen to work well.
+-	 * seed is arbitrarily chosen
+-	 */
+-
+-	#define m 0x5bd1e995
+-	#define r 24
+-	#define seed 42
+-
+-	const unsigned char * data = input;
+-	unsigned char overflow[4];
++	uint8_t overflow[4];
++	const uint8_t *data;
+ 	va_list va;
+-	uint32_t h;
++	uint32_t h1;
++	uint32_t k1;
++	uint32_t c1;
++	uint32_t c2;
+ 
+-	/* Initialize the hash based on the length */
+-	va_start (va, len);
+-	h = len;
+-	while (va_arg (va, const void *))
+-		h += va_arg (va, size_t);
+-	h ^= seed;
+-	va_end (va);
++	h1 = 42; /* arbitrary choice of seed */
++	c1 = 0xcc9e2d51;
++	c2 = 0x1b873593;
++	data = input;
++
++	/* body */
+ 
+ 	/* Mix 4 bytes at a time into the hash */
+ 	va_start (va, len);
+ 	for (;;) {
+-		uint32_t k;
+-
+ 		if (len >= 4) {
+-			k = *(uint32_t *)data;
++			memcpy (&k1, data, 4);
+ 			data += 4;
+ 			len -= 4;
+ 
+@@ -635,34 +634,42 @@ p11_hash_murmur2 (void *hash,
+ 				break;
+ 			}
+ 
+-			k = *(uint32_t *)overflow;
++			memcpy (&k1, overflow, 4);
+ 		}
+ 
+-		k *= m;
+-		k ^= k >> r;
+-		k *= m;
++		k1 *= c1;
++		k1 = rotl (k1, 15);
++		k1 *= c2;
+ 
+-		h *= m;
+-		h ^= k;
++		h1 ^= k1;
++		h1 = rotl (h1, 13);
++		h1 = h1 * 5 + 0xe6546b64;
+ 	}
+-	va_end (va);
+ 
+-	/* Handle the last few bytes of the input array */
+-	switch(len) {
+-	case 3: h ^= overflow[2] << 16;
+-	case 2: h ^= overflow[1] << 8;
+-	case 1: h ^= overflow[0];
+-		h *= m;
+-	};
+-
+-	/*
+-	 * Do a few final mixes of the hash to ensure the last few
+-	 * bytes are well-incorporated.
+-	 */
+-	h ^= h >> 13;
+-	h *= m;
+-	h ^= h >> 15;
++	/* tail */
++
++	k1 = 0;
++
++	switch (len) {
++	case 3:
++		k1 ^= overflow[2] << 16;
++	case 2:
++		k1 ^= overflow[1] << 8;
++	case 1:
++		k1 ^= overflow[0];
++		k1 *= c1;
++		k1 = rotl (k1, 15);
++		k1 *= c2;
++		h1 ^= k1;
++	default:
++		break;
++	}
++
++	/* finalization */
++
++	h1 ^= len;
++	h1 = fmix(h1);
+ 
+-	assert (sizeof (h) == P11_HASH_MURMUR2_LEN);
+-	memcpy (hash, &h, sizeof (h));
++	assert (sizeof (h1) == P11_HASH_MURMUR3_LEN);
++	memcpy (hash, &h1, sizeof (h1));
+ }
+diff --git a/common/hash.h b/common/hash.h
+index b06438d..09f7646 100644
+--- a/common/hash.h
++++ b/common/hash.h
+@@ -57,9 +57,9 @@ void     p11_hash_sha1      (unsigned char *hash,
+                              size_t length,
+                              ...) GNUC_NULL_TERMINATED;
+ 
+-#define P11_HASH_MURMUR2_LEN 4
++#define P11_HASH_MURMUR3_LEN 4
+ 
+-void     p11_hash_murmur2   (void *hash,
++void     p11_hash_murmur3   (void *hash,
+                              const void *input,
+                              size_t length,
+                              ...) GNUC_NULL_TERMINATED;
+diff --git a/common/tests/test-hash.c b/common/tests/test-hash.c
+index a1cb917..eecf09b 100644
+--- a/common/tests/test-hash.c
++++ b/common/tests/test-hash.c
+@@ -137,14 +137,14 @@ test_murmur2 (CuTest *cu)
+ {
+ 	uint32_t one, two, four, seven, eleven, split;
+ 
+-	assert (sizeof (one) == P11_HASH_MURMUR2_LEN);
++	assert (sizeof (one) == P11_HASH_MURMUR3_LEN);
+ 
+-	p11_hash_murmur2 ((unsigned char *)&one, "one", 3, NULL);
+-	p11_hash_murmur2 ((unsigned char *)&two, "two", 3, NULL);
+-	p11_hash_murmur2 ((unsigned char *)&four, "four", 4, NULL);
+-	p11_hash_murmur2 ((unsigned char *)&seven, "seven", 5, NULL);
+-	p11_hash_murmur2 ((unsigned char *)&eleven, "eleven", 6, NULL);
+-	p11_hash_murmur2 ((unsigned char *)&split, "ele", 3, "ven", 3, NULL);
++	p11_hash_murmur3 ((unsigned char *)&one, "one", 3, NULL);
++	p11_hash_murmur3 ((unsigned char *)&two, "two", 3, NULL);
++	p11_hash_murmur3 ((unsigned char *)&four, "four", 4, NULL);
++	p11_hash_murmur3 ((unsigned char *)&seven, "seven", 5, NULL);
++	p11_hash_murmur3 ((unsigned char *)&eleven, "eleven", 6, NULL);
++	p11_hash_murmur3 ((unsigned char *)&split, "ele", 3, "ven", 3, NULL);
+ 
+ 	CuAssertTrue (cu, one != two);
+ 	CuAssertTrue (cu, one != four);
+@@ -166,11 +166,11 @@ test_murmur2_incr (CuTest *cu)
+ {
+ 	uint32_t first, second;
+ 
+-	p11_hash_murmur2 ((unsigned char *)&first,
++	p11_hash_murmur3 ((unsigned char *)&first,
+ 	                  "this is the long input!", (size_t)23,
+ 	                  NULL);
+ 
+-	p11_hash_murmur2 ((unsigned char *)&second,
++	p11_hash_murmur3 ((unsigned char *)&second,
+ 	                  "this", (size_t)4,
+ 	                  " ", (size_t)1,
+ 	                  "is ", (size_t)3,
+-- 
+1.8.2




More information about the Pkg-gnutls-commits mailing list