You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/06/16 00:44:00 UTC
svn commit: r1136231 - in /tomcat/trunk:
java/org/apache/catalina/ssi/ExpressionParseTree.java
webapps/docs/changelog.xml
Author: markt
Date: Wed Jun 15 22:44:00 2011
New Revision: 1136231
URL: http://svn.apache.org/viewvc?rev=1136231&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=48956
Implement regular expression support for SSI
Modified:
tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java?rev=1136231&r1=1136230&r2=1136231&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java (original)
+++ tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java Wed Jun 15 22:44:00 2011
@@ -20,6 +20,7 @@ package org.apache.catalina.ssi;
import java.text.ParseException;
import java.util.LinkedList;
import java.util.List;
+import java.util.regex.Pattern;
/**
* Represents a parsed expression.
*
@@ -350,6 +351,21 @@ public class ExpressionParseTree {
protected int compareBranches() {
String val1 = ((StringNode)left).getValue();
String val2 = ((StringNode)right).getValue();
+
+ int val2Len = val2.length();
+ if (val2Len > 1 && val2.charAt(0) == '/' &&
+ val2.charAt(val2Len - 1) == '/') {
+ // Treat as a regular expression
+ String expr = val2.substring(1, val2Len - 1);
+ Pattern pattern = Pattern.compile(expr);
+ // Regular expressions will only ever be used with EqualNode
+ // so return zero for equal and non-zero for not equal
+ if (pattern.matcher(val1).find()) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }
return val1.compareTo(val2);
}
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1136231&r1=1136230&r2=1136231&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Jun 15 22:44:00 2011
@@ -46,6 +46,9 @@
<subsection name="Catalina">
<changelog>
<add>
+ <bug>48956</bug>: Add regular expression support for SSI. (markt)
+ </add>
+ <add>
<bug>50677</bug>: Allow system property variables to be used in the
values of "common.loader" and other "*.loader" properties in the
<code>catalina.properties</code> file. (kkolinko)
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1136231 - in /tomcat/trunk: java/org/apache/catalina/ssi/ExpressionParseTree.java
webapps/docs/changelog.xml
Posted by Mark Thomas <ma...@apache.org>.
On 16/06/2011 11:57, Tim Funk wrote:
> **
> What happens if PatternSyntaxException is thrown? (bad regex is passed in)
> While it is a RuntimeException - i'd assume you'd want to log.warn(with the
> regex) and return -1;
Not sure. Swallowing the error and assuming a non-match seems bad too. A
syntax error in a JSP page isn't going to be that forgiving. Time to ask
"What would httpd do?".
Wasn't expecting that. It returns a match. I'll amend my patch to do the
same.
Mark
>
>
> -Tim
>
> On 6/15/2011 6:44 PM, markt@apache.org wrote:
>
> Modified: tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java
> URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java?rev=1136231&r1=1136230&r2=1136231&view=diff
> ==============================================================================
> @@ -350,6 +351,21 @@ public class ExpressionParseTree {
> protected int compareBranches() {
> String val1 = ((StringNode)left).getValue();
> String val2 = ((StringNode)right).getValue();
> +
> + int val2Len = val2.length();
> + if (val2Len > 1 && val2.charAt(0) == '/' &&
> + val2.charAt(val2Len - 1) == '/') {
> + // Treat as a regular expression
> + String expr = val2.substring(1, val2Len - 1);
> + Pattern pattern = Pattern.compile(expr);
> + // Regular expressions will only ever be used with EqualNode
> + // so return zero for equal and non-zero for not equal
> + if (pattern.matcher(val1).find()) {
> + return 0;
> + } else {
> + return -1;
> + }
> + }
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
Re: svn commit: r1136231 - in /tomcat/trunk: java/org/apache/catalina/ssi/ExpressionParseTree.java
webapps/docs/changelog.xml
Posted by Tim Funk <fu...@apache.org>.
**
What happens if PatternSyntaxException is thrown? (bad regex is passed in)
While it is a RuntimeException - i'd assume you'd want to log.warn(with the
regex) and return -1;
-Tim
On 6/15/2011 6:44 PM, markt@apache.org wrote:
Modified: tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ssi/ExpressionParseTree.java?rev=1136231&r1=1136230&r2=1136231&view=diff
==============================================================================
@@ -350,6 +351,21 @@ public class ExpressionParseTree {
protected int compareBranches() {
String val1 = ((StringNode)left).getValue();
String val2 = ((StringNode)right).getValue();
+
+ int val2Len = val2.length();
+ if (val2Len > 1 && val2.charAt(0) == '/' &&
+ val2.charAt(val2Len - 1) == '/') {
+ // Treat as a regular expression
+ String expr = val2.substring(1, val2Len - 1);
+ Pattern pattern = Pattern.compile(expr);
+ // Regular expressions will only ever be used with EqualNode
+ // so return zero for equal and non-zero for not equal
+ if (pattern.matcher(val1).find()) {
+ return 0;
+ } else {
+ return -1;
+ }
+ }