You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2008/12/07 18:31:55 UTC

svn commit: r724161 - in /james/jsieve/trunk/main/src: main/java/org/apache/jsieve/ main/jjtree/sieve/ test/java/org/apache/jsieve/ test/java/org/apache/jsieve/utils/

Author: rdonkin
Date: Sun Dec  7 09:31:54 2008
New Revision: 724161

URL: http://svn.apache.org/viewvc?rev=724161&view=rev
Log:
https://issues.apache.org/jira/browse/JSIEVE-42 SieveNode.getValue() should escape value JSIEVE-42.

Modified:
    james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
    james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveValidationVisitor.java
    james/jsieve/trunk/main/src/main/jjtree/sieve/sieve.jjt
    james/jsieve/trunk/main/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
    james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/JUnitUtils.java

Modified: james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java?rev=724161&r1=724160&r2=724161&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java (original)
+++ james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveParserVisitorImpl.java Sun Dec  7 09:31:54 2008
@@ -222,20 +222,8 @@
     public Object visit(ASTstring node, Object data) {
         // Strings are always surround by double-quotes
         final String value = (String) node.getValue();
-        final StringBuffer buffer = new StringBuffer(value);
-        buffer.deleteCharAt(value.length() - 1);
-        buffer.deleteCharAt(0);
-        int i = 0;
-        while (i < buffer.length()) {
-            if ('\\' == buffer.charAt(i)) {
-                buffer.deleteCharAt(i);
-            }
-            i++;
-        }
-
-        final String result = buffer.toString();
         // A String is terminal, add it
-        ((List) data).add(result);
+        ((List) data).add(value);
         return data;
     }
 

Modified: james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveValidationVisitor.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveValidationVisitor.java?rev=724161&r1=724160&r2=724161&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveValidationVisitor.java (original)
+++ james/jsieve/trunk/main/src/main/java/org/apache/jsieve/SieveValidationVisitor.java Sun Dec  7 09:31:54 2008
@@ -119,9 +119,7 @@
         if (isInRequire) {
             final Object value = node.getValue();
             if (value != null && value instanceof String) {
-                final String quotedName = (String) value;
-                final String name = quotedName.substring(1,
-                        quotedName.length() - 1);
+                final String name = (String) value;
                 try {
                     commandManager.getCommand(name);
                 } catch (LookupException e) {

Modified: james/jsieve/trunk/main/src/main/jjtree/sieve/sieve.jjt
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/main/jjtree/sieve/sieve.jjt?rev=724161&r1=724160&r2=724161&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/main/jjtree/sieve/sieve.jjt (original)
+++ james/jsieve/trunk/main/src/main/jjtree/sieve/sieve.jjt Sun Dec  7 09:31:54 2008
@@ -255,10 +255,27 @@
 {
   (quoted_string = <QUOTED_STRING> | multi_line = <MULTI_LINE>)
   {
+    final String stringValue;
     if (null != quoted_string)
-      jjtThis.setValue(quoted_string.image);
+      stringValue = quoted_string.image;
     else if (null != multi_line)
-      jjtThis.setValue(multi_line.image);  
+      stringValue=multi_line.image;
+    else
+      stringValue=null;  
+    if (stringValue != null) {
+        // Unescape and unquote
+        final StringBuffer buffer = new StringBuffer(stringValue);
+        buffer.deleteCharAt(stringValue.length() - 1);
+        buffer.deleteCharAt(0);
+        int i = 0;
+        while (i < buffer.length()) {
+            if ('\\' == buffer.charAt(i)) {
+                buffer.deleteCharAt(i);
+            }
+            i++;
+        }
+        jjtThis.setValue(buffer.toString());
+    }
   }
 }
 

Modified: james/jsieve/trunk/main/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java?rev=724161&r1=724160&r2=724161&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java (original)
+++ james/jsieve/trunk/main/src/test/java/org/apache/jsieve/SieveParserVisitorImplQuoteTest.java Sun Dec  7 09:31:54 2008
@@ -26,9 +26,12 @@
 
 import org.apache.commons.logging.LogFactory;
 import org.apache.jsieve.parser.generated.ASTstring;
+import org.apache.jsieve.parser.generated.Node;
+import org.apache.jsieve.utils.JUnitUtils;
 
 public class SieveParserVisitorImplQuoteTest extends TestCase {
 
+    
     SieveParserVisitorImpl visitor;
 
     List data;
@@ -44,56 +47,60 @@
                         .getTestManager(), LogFactory
                         .getLog(SieveParserVisitorImplQuoteTest.class)));
         data = new ArrayList();
-        node = new ASTstring(100);
-    }
 
-    public void testVisitASTstringObjectQuoted() {
+    }
 
-        node.setValue("\"value\"");
+    private ASTstring stringNode(String value) throws Exception {
+        Node node = JUnitUtils.parse("fileinto " + value + ";");
+        return (ASTstring) node.jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0).jjtGetChild(0);
+    }
+    
+    public void testVisitASTstringObjectQuoted() throws Exception {
+        node = stringNode("\"value\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "value", data
                 .get(0));
     }
 
-    public void testVisitASTstringObjectQuoteInQuoted() {
-
-        node.setValue("\"val\\\"ue\"");
+    public void testVisitASTstringObjectQuoteInQuoted() throws Exception {
+        
+        node = stringNode("\"val\\\"ue\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "val\"ue", data
                 .get(0));
     }
 
-    public void testVisitASTstringObjectDoubleSlashQuoted() {
+    public void testVisitASTstringObjectDoubleSlashQuoted() throws Exception {
 
-        node.setValue("\"val\\\\ue\"");
+        node = stringNode("\"val\\\\ue\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "val\\ue", data
                 .get(0));
     }
 
-    public void testVisitASTstringObjectSlashQuoted() {
+    public void testVisitASTstringObjectSlashQuoted() throws Exception {
 
-        node.setValue("\"val\\ue\"");
+        node = stringNode("\"value\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "value", data
                 .get(0));
     }
 
-    public void testVisitASTstringEmptyQuoted() {
+    public void testVisitASTstringEmptyQuoted() throws Exception {
 
-        node.setValue("\"\"");
+        node = stringNode("\"\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "", data.get(0));
     }
 
-    public void testVisitASTstringObjectMultiSlashQuoted() {
+    public void testVisitASTstringObjectMultiSlashQuoted() throws Exception {
 
-        node.setValue("\"v\\\\al\\\\u\\e\\\\\"");
+        node = stringNode("\"v\\\\al\\\\u\\e\\\\\"");
         visitor.visit(node, data);
         assertEquals("Data value added after quotes stripped", 1, data.size());
         assertEquals("Data value added after quotes stripped", "v\\al\\ue\\",

Modified: james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/JUnitUtils.java
URL: http://svn.apache.org/viewvc/james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/JUnitUtils.java?rev=724161&r1=724160&r2=724161&view=diff
==============================================================================
--- james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/JUnitUtils.java (original)
+++ james/jsieve/trunk/main/src/test/java/org/apache/jsieve/utils/JUnitUtils.java Sun Dec  7 09:31:54 2008
@@ -28,6 +28,7 @@
 import org.apache.jsieve.ConfigurationManager;
 import org.apache.jsieve.exception.SieveException;
 import org.apache.jsieve.mail.MailAdapter;
+import org.apache.jsieve.parser.generated.Node;
 import org.apache.jsieve.parser.generated.ParseException;
 
 /**
@@ -56,9 +57,9 @@
      * @throws SieveException
      * @throws ParseException
      */
-    static public void parse(String script) throws SieveException,
+    static public Node parse(String script) throws SieveException,
             ParseException {
-        new ConfigurationManager().build().parse(
+        return new ConfigurationManager().build().parse(
                 new ByteArrayInputStream(script.getBytes()));
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org