ChangeSet ID: 21053 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard(a)winehq.org 2005/11/02 13:58:01 Modified files: dlls/msi/tests : package.c dlls/msi : cond.y Log message: Mike McCormack <mike(a)codeweavers.com> NULL and empty strings are the same in conditions. Patch: http://cvs.winehq.org/patch.py?id=21053 Old revision New revision Changes Path 1.8 1.9 +6 -0 wine/dlls/msi/tests/package.c 1.23 1.24 +6 -2 wine/dlls/msi/cond.y Index: wine/dlls/msi/tests/package.c diff -u -p wine/dlls/msi/tests/package.c:1.8 wine/dlls/msi/tests/package.c:1.9 --- wine/dlls/msi/tests/package.c:1.8 2 Nov 2005 19:58: 1 -0000 +++ wine/dlls/msi/tests/package.c 2 Nov 2005 19:58: 1 -0000 @@ -587,6 +587,12 @@ void test_condition(void) r = MsiEvaluateCondition(hpkg, "NOT ( 1 AND 1 )"); ok( r == MSICONDITION_FALSE, "wrong return val\n"); + r = MsiEvaluateCondition(hpkg, "NOT A AND (BBBBBBBBBB=2 OR CCC=1) AND Ddddddddd"); + ok( r == MSICONDITION_FALSE, "wrong return val\n"); + + r = MsiEvaluateCondition(hpkg, "Installed<>\"\""); + ok( r == MSICONDITION_FALSE, "wrong return val\n"); + MsiCloseHandle( hpkg ); } Index: wine/dlls/msi/cond.y diff -u -p wine/dlls/msi/cond.y:1.23 wine/dlls/msi/cond.y:1.24 --- wine/dlls/msi/cond.y:1.23 2 Nov 2005 19:58: 1 -0000 +++ wine/dlls/msi/cond.y 2 Nov 2005 19:58: 1 -0000 @@ -361,6 +361,10 @@ static WCHAR *strstriW( const WCHAR *str static INT compare_string( LPCWSTR a, INT operator, LPCWSTR b ) { + /* null and empty string are equivalent */ + if (!a) a = szEmpty; + if (!b) b = szEmpty; + /* a or b may be NULL */ switch (operator) { @@ -377,7 +381,7 @@ static INT compare_string( LPCWSTR a, IN case COND_LE: return 1 != lstrcmpW( a, b ); case COND_SS: /* substring */ - return ( a && b && strstrW( a, b ) ) ? 1 : 0; + return strstrW( a, b ) ? 1 : 0; case COND_ILT: return -1 == lstrcmpiW( a, b ); case COND_IGT: @@ -391,7 +395,7 @@ static INT compare_string( LPCWSTR a, IN case COND_ILE: return 1 != lstrcmpiW( a, b ); case COND_ISS: - return ( a && b && strstriW( a, b ) ) ? 1 : 0; + return strstriW( a, b ) ? 1 : 0; case COND_LHS: case COND_RHS: case COND_ILHS: