ChangeSet ID: 21053 CVSROOT: /opt/cvs-commit Module name: wine Changes by: julliard@winehq.org 2005/11/02 13:58:01
Modified files: dlls/msi/tests : package.c dlls/msi : cond.y
Log message: Mike McCormack mike@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: