luehe 2004/08/10 16:16:09 Modified: jasper2/src/share/org/apache/jasper/compiler Tag: TOMCAT_5_0 ParserController.java Mark.java Log: Ported fix for Bugzilla 29971 ("Commented out page directive is parsed") Revision Changes Path No revision No revision 1.52.2.1 +34 -2 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java Index: ParserController.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v retrieving revision 1.52 retrieving revision 1.52.2.1 diff -u -r1.52 -r1.52.2.1 --- ParserController.java 17 Mar 2004 19:23:03 -0000 1.52 +++ ParserController.java 10 Aug 2004 23:16:08 -0000 1.52.2.1 @@ -407,13 +407,44 @@ String encoding = null; String saveEncoding = null; + jspReader.reset(startMark); + /* * Determine page encoding from directive of the form <%@ page %> or * <%@ tag %> */ - jspReader.reset(startMark); - while (jspReader.skipUntil("<%@") != null) { + while (true) { + Mark current = jspReader.mark(); + + Mark beginDirective = jspReader.skipUntil("<%@"); + if (beginDirective == null) { + break; + } + // Move past the '<%@' delimiter + Mark beginDirectiveBody = jspReader.mark(); + + // Check to see if directive is nested inside comment + jspReader.reset(current); + Mark beginComment = jspReader.skipUntil("<%--"); + if (beginComment != null) { + Mark endComment = jspReader.skipUntil("--%>"); + if (endComment == null) { + err.jspError(beginComment, "jsp.error.unterminated", + "<%--"); + } + + if (beginDirective.isGreater(beginComment) + && endComment.isGreater(beginDirective)) { + // Directive is nested inside comment, skip until end of + // comment + jspReader.reset(endComment); + continue; + } + } + + jspReader.reset(beginDirectiveBody); jspReader.skipSpaces(); + // compare for "tag ", so we don't match "taglib" if (jspReader.matches("tag ") || jspReader.matches("page")) { @@ -429,6 +460,7 @@ } } } + if (encoding == null) { encoding = saveEncoding; } 1.7.2.1 +16 -0 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Mark.java Index: Mark.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Mark.java,v retrieving revision 1.7 retrieving revision 1.7.2.1 diff -u -r1.7 -r1.7.2.1 --- Mark.java 12 May 2004 17:45:37 -0000 1.7 +++ Mark.java 10 Aug 2004 23:16:08 -0000 1.7.2.1 @@ -227,6 +227,22 @@ return false; } + /** + * @return true if this Mark is greather than the <code>other</code> + * Mark, false otherwise. + */ + public boolean isGreater(Mark other) { + + boolean greater = false; + + if (this.line > other.line) { + greater = true; + } else if (this.line == other.line && this.col > other.col) { + greater = true; + } + + return greater; + } /** * Keep track of parser before parsing an included file.
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]