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;