- Merge from trunk
[reactos.git] / dll / win32 / msi / cond.tab.c
index 5449d99..e68723d 100644 (file)
@@ -1989,7 +1989,7 @@ yyreduce:
             COND_input* cond = (COND_input*) info;
             UINT len;
 
-            (yyval.string) = msi_dup_property( cond->package, (yyvsp[(1) - (1)].string) );
+            (yyval.string) = msi_dup_property( cond->package->db, (yyvsp[(1) - (1)].string) );
             if ((yyval.string))
             {
                 len = (lstrlenW((yyval.string)) + 1) * sizeof (WCHAR);
@@ -2329,11 +2329,21 @@ static INT compare_substring( LPCWSTR a, INT operator, LPCWSTR b )
     case COND_LHS:
        return 0 == strncmpW( a, b, lstrlenW( b ) );
     case COND_RHS:
-       return 0 == lstrcmpW( a + (lstrlenW( a ) - lstrlenW( b )), b );
+    {
+        int l = lstrlenW( a );
+        int r = lstrlenW( b );
+        if (r > l) return 0;
+        return 0 == lstrcmpW( a + (l - r), b );
+    }
     case COND_ILHS:
        return 0 == strncmpiW( a, b, lstrlenW( b ) );
     case COND_IRHS:
-        return 0 == lstrcmpiW( a + (lstrlenW( a ) - lstrlenW( b )), b );
+    {
+        int l = lstrlenW( a );
+        int r = lstrlenW( b );
+        if (r > l) return 0;
+        return 0 == lstrcmpiW( a + (l - r), b );
+    }
     default:
        ERR("invalid substring operator\n");
         return 0;