[Python-Dev] RE: Unicode character name hashing

Bill Tutt billtut@microsoft.com
Thu, 13 Jul 2000 14:44:34 -0700


Does this patch happen to fix it?
I'm afraid my skills relating to signed overflow is a bit rusty... :(

Bill

===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/ucnhash.c,v
retrieving revision 1.2
diff -u -r1.2 ucnhash.c
--- ucnhash.c	2000/06/29 00:06:39	1.2
+++ ucnhash.c	2000/07/13 21:41:07
@@ -30,12 +30,12 @@
 
     len = cch;
     p = (unsigned char *) key;
-    x = 1694245428;
+    x = (long)0x64fc2234;
     while (--len >= 0)
-        x = (1000003*x) ^ toupper(*(p++));
+        x = ((0xf4243 * x) & 0xFFFFFFFF) ^ toupper(*(p++));
     x ^= cch + 10;
-    if (x == -1)
-        x = -2;
+    if (x == (long)0xFFFFFFFF)
+        x = (long)0xfffffffe;
     x %= k_cHashElements;
     /* ensure the returned value is positive so we mimic Python's %
operator */
     if (x < 0)
@@ -52,12 +52,12 @@
 
     len = cch;
     p = (unsigned char *) key;
-    x = -1917331657;
+    x = (long)0x8db7d737;
     while (--len >= 0)
-        x = (1000003*x) ^ toupper(*(p++));
+        x = ((0xf4243 * x) & 0xFFFFFFFF) ^ toupper(*(p++));
     x ^= cch + 10;
-    if (x == -1)
-        x = -2;
+    if (x == (long)0xFFFFFFFF)
+        x = (long)0xfffffffe;
     x %= k_cHashElements;
     /* ensure the returned value is positive so we mimic Python's %
operator */
     if (x < 0)



 -----Original Message-----
From: 	Mark Favas [mailto:m.favas@per.dem.csiro.au] 
Sent:	Thursday, July 13, 2000 1:16 PM
To:	python-dev@python.org; Bill Tutt
Subject:	Unicode character name hashing

[Bill has epiphany]
>I just had a rather unhappy epiphany this morning.
>F1, and f2 in ucnhash.c might not work on machines where sizeof(long) >!=
32 bits.

I get the following from test_ucn on an Alpha running Tru64 Unix:

python Lib/test/test_ucn.py
UnicodeError: Unicode-Escape decoding error: Invalid Unicode Character
Name

This is with the current CVS - and it's been failing this test for some
time now. I'm happy to test any fixes...

-- 
Email  - m.favas@per.dem.csiro.au        Mark C Favas
Phone  - +61 8 9333 6268, 0418 926 074   CSIRO Exploration & Mining
Fax    - +61 8 9383 9891                 Private Bag No 5, Wembley
WGS84  - 31.95 S, 115.80 E               Western Australia 6913