You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by mr...@apache.org on 2010/03/29 22:06:55 UTC

svn commit: r928888 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java

Author: mreutegg
Date: Mon Mar 29 20:06:54 2010
New Revision: 928888

URL: http://svn.apache.org/viewvc?rev=928888&view=rev
Log:
JCR-2558: UserManager.getAuthorizable() may fail with InvalidQueryException

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java?rev=928888&r1=928887&r2=928888&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/IndexNodeResolver.java Mon Mar 29 20:06:54 2010
@@ -139,7 +139,7 @@ class IndexNodeResolver extends NodeReso
                 stmt.append(ISO9075.encode(pName));
                 if (exact) {
                     stmt.append("='");
-                    stmt.append(value);
+                    stmt.append(value.replaceAll("'", "''"));
                     stmt.append("'");
                 } else {
                     stmt.append(",'%");
@@ -164,7 +164,7 @@ class IndexNodeResolver extends NodeReso
             if (c == '\\') {
                 ret.append("\\\\");
             } else if (c == '\'') {
-                ret.append("\\'");
+                ret.append("''");
             } else {
                 ret.append(c);
             }

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java?rev=928888&r1=928887&r2=928888&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java Mon Mar 29 20:06:54 2010
@@ -62,4 +62,47 @@ public class IndexNodeResolverTest exten
             save();
         }
     }
+
+    public void testFindNodesNonExactWithApostrophe()
+            throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser();
+        Value vs = superuser.getValueFactory().createValue("value ' with apostrophe");
+        currentUser.setProperty(propertyName1, vs);
+        save();
+
+        Name propName = ((SessionImpl) superuser).getQName(propertyName1);
+        try {
+            NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+            NodeIterator result = nr.findNodes(propName, "value ' with apostrophe", UserConstants.NT_REP_USER, false);
+            assertTrue("expected result", result.hasNext());
+            assertEquals(currentUser.getNode().getPath(), result.nextNode().getPath());
+            assertFalse("expected no more results", result.hasNext());
+        } finally {
+            currentUser.removeProperty(propertyName1);
+            save();
+        }
+    }
+
+
+    public void testFindNodesExactWithApostrophe()
+            throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser();
+        Value vs = superuser.getValueFactory().createValue("value ' with apostrophe");
+        currentUser.setProperty(propertyName1, vs);
+        save();
+
+        Name propName = ((SessionImpl) superuser).getQName(propertyName1);
+        try {
+            NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+            NodeIterator result = nr.findNodes(propName, "value ' with apostrophe", UserConstants.NT_REP_USER, true);
+            assertTrue("expected result", result.hasNext());
+            assertEquals(currentUser.getNode().getPath(), result.nextNode().getPath());
+            assertFalse("expected no more results", result.hasNext());
+        } finally {
+            currentUser.removeProperty(propertyName1);
+            save();
+        }
+    }
 }
\ No newline at end of file