Commit eba2781ab98282714c19df4c758a140dc0cc33ad

suzuki toshiya 2011-11-30T22:40:43

[apinames] Fix the overflow of signed integer hash. * src/tools/apinames.c (names_add): Change the type of `h' from int to unsigned int, to prevent undefined behaviour in the overflow of signed integers (overflow of unsigned int is defined to be wrap around). Found by clang test suggested by Sean McBride.

diff --git a/ChangeLog b/ChangeLog
index f67d886..30e6762 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2011-11-30  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
+
+	[apinames] Fix the overflow of signed integer hash.
+
+	* src/tools/apinames.c (names_add): Change the type of `h' from
+	int to unsigned int, to prevent undefined behaviour in the
+	overflow of signed integers (overflow of unsigned int is defined
+	to be wrap around).  Found by clang test suggested by Sean
+	McBride.
+
 2011-11-30  Werner Lemberg  <wl@gnu.org>
 
 	[winfonts] Remove casts.
diff --git a/src/tools/apinames.c b/src/tools/apinames.c
index 0348e1a..80c92d4 100644
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -59,8 +59,9 @@ static void
 names_add( const char*  name,
            const char*  end )
 {
-  int   nn, len, h;
-  Name  nm;
+  unsigned int  h;
+  int           nn, len;
+  Name          nm;
 
   if ( end <= name )
     return;