Make the msistring_makehash return something other than just 1 or
0. Also handle the case where the string or stored string is null.

diff --git a/dlls/msi/string.c b/dlls/msi/string.c
index fa69ebc..59affef 100644
--- a/dlls/msi/string.c
+++ b/dlls/msi/string.c
@@ -56,11 +56,14 @@
 {
     int hash = 0;
 
+    if (str==NULL)
+        return hash;
+
     while( *str )
     {
         hash ^= *str++;
         hash *= 53;
-        hash = (hash<<5) || (hash>>27);
+        hash = (hash<<5) | (hash>>27);
     }
     return hash;
 }
@@ -354,8 +357,9 @@
     hash = msistring_makehash( str );
     for( i=0; i<st->maxcount; i++ )
     {
-        if( ( st->strings[i].hash == hash ) &&
-            !strcmpW( st->strings[i].str, str ) )
+        if ( (str == NULL && st->strings[i].str == NULL) || 
+            ( ( st->strings[i].hash == hash ) &&
+            !strcmpW( st->strings[i].str, str ) ))
         {
             r = ERROR_SUCCESS;
             *id = i;