ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/test/org/apache/jasper/compiler/TestGenerator.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/test/org/apache/jasper/compiler/TestGenerator.java
Status
scanned
Type
file
Name
TestGenerator.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
37284 (36.4 KB)
MD5
4fcba1b82c733129f12b17df290c17cc
SHA1
f51a34246b106f4bb1ff9317a53969264fd17653
SHA256
1940e7705d8879bf6e004f84dceb03e9f8dcecbbf82c81f8670c176afe1f61f9
SHA512

      
    
SHA1_git
c2fdf23ebe9a6b01ed286cb6954e17adfcfdc7b4
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
TestGenerator.java | 36.4 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jasper.compiler; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.beans.PropertyEditorSupport; import java.io.File; import java.io.IOException; import java.nio.charset.CodingErrorAction; import java.util.Date; import java.util.Scanner; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.jsp.JspException; import jakarta.servlet.jsp.PageContext; import jakarta.servlet.jsp.tagext.BodyTagSupport; import jakarta.servlet.jsp.tagext.DynamicAttributes; import jakarta.servlet.jsp.tagext.JspIdConsumer; import jakarta.servlet.jsp.tagext.Tag; import jakarta.servlet.jsp.tagext.TagData; import jakarta.servlet.jsp.tagext.TagExtraInfo; import jakarta.servlet.jsp.tagext.TagSupport; import jakarta.servlet.jsp.tagext.TryCatchFinally; import jakarta.servlet.jsp.tagext.VariableInfo; import org.junit.Assert; import org.junit.Test; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; import org.apache.catalina.Wrapper; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; import org.apache.jasper.servlet.JasperInitializer; import org.apache.tomcat.util.buf.ByteChunk; public class TestGenerator extends TomcatBaseTest { private static final String NEW_LINE = System.lineSeparator(); @Test public void testBug45015a() throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk res = getUrl("http://localhost:" + getPort() + "/test/bug45nnn/bug45015a.jsp"); String result = res.toString(); // Beware of the differences between escaping in JSP attributes and // in Java Strings assertEcho(result, "00-hello 'world'"); assertEcho(result, "01-hello 'world"); assertEcho(result, "02-hello world'"); assertEcho(result, "03-hello world'"); assertEcho(result, "04-hello world\""); assertEcho(result, "05-hello \"world\""); assertEcho(result, "06-hello \"world"); assertEcho(result, "07-hello world\""); assertEcho(result, "08-hello world'"); assertEcho(result, "09-hello world\""); } @Test public void testBug45015b() throws Exception { getTomcatInstanceTestWebapp(false, true); int rc = getUrl("http://localhost:" + getPort() + "/test/bug45nnn/bug45015b.jsp", new ByteChunk(), null); Assert.assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, rc); } @Test public void testBug45015c() throws Exception { getTomcatInstanceTestWebapp(false, true); int rc = getUrl("http://localhost:" + getPort() + "/test/bug45nnn/bug45015c.jsp", new ByteChunk(), null); Assert.assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, rc); } @Test public void testBug48701Fail() throws Exception { getTomcatInstanceTestWebapp(true, true); int rc = getUrl("http://localhost:" + getPort() + "/test/bug48nnn/bug48701-fail.jsp", new ByteChunk(), null); Assert.assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, rc); } @Test public void testBug48701UseBean() throws Exception { testBug48701("bug48nnn/bug48701-UseBean.jsp"); } @Test public void testBug48701VariableInfo() throws Exception { testBug48701("bug48nnn/bug48701-VI.jsp"); } @Test public void testBug48701TagVariableInfoNameGiven() throws Exception { testBug48701("bug48nnn/bug48701-TVI-NG.jsp"); } @Test public void testBug48701TagVariableInfoNameFromAttribute() throws Exception { testBug48701("bug48nnn/bug48701-TVI-NFA.jsp"); } private void testBug48701(String jsp) throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk res = getUrl("http://localhost:" + getPort() + "/test/" + jsp); String result = res.toString(); assertEcho(result, "00-PASS"); } public static class Bug48701 extends TagSupport { private static final long serialVersionUID = 1L; private String beanName = null; public void setBeanName(String beanName) { this.beanName = beanName; } public String getBeanName() { return beanName; } @Override public int doStartTag() throws JspException { Bean bean = new Bean(); bean.setTime((new Date()).toString()); pageContext.setAttribute("now", bean); return super.doStartTag(); } } public static class Bug48701TEI extends TagExtraInfo { @Override public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[] { new VariableInfo("now", Bean.class.getCanonicalName(), true, VariableInfo.AT_END) }; } } public static class Bean { private String time; public void setTime(String time) { this.time = time; } public String getTime() { return time; } } @Test public void testBug49799() throws Exception { String[] expected = { "<p style=\"color:red\">00-Red</p>", "<p>01-Not Red</p>", "<p style=\"color:red\">02-Red</p>", "<p>03-Not Red</p>", "<p style=\"color:red\">04-Red</p>", "<p>05-Not Red</p>" }; getTomcatInstanceTestWebapp(false, true); ByteChunk res = new ByteChunk(); getUrl("http://localhost:" + getPort() + "/test/bug49nnn/bug49799.jsp", res, null); // Check request completed String result = res.toString(); String[] lines = result.split(" | | "); int i = 0; for (String line : lines) { if (line.length() > 0) { Assert.assertEquals(expected[i], line); i++; } } } /** Assertion for text printed by tags:echo */ private static void assertEcho(String result, String expected) { Assert.assertTrue(result.indexOf("<p>" + expected + "</p>") > 0); } @Test public void testBug56529() throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk bc = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/bug5nnnn/bug56529.jsp", bc, null); Assert.assertEquals(HttpServletResponse.SC_OK, rc); String response = bc.toStringInternal(CodingErrorAction.REPORT, CodingErrorAction.REPORT); Assert.assertTrue(response, response.contains("[1:attribute1: '', attribute2: '']")); Assert.assertTrue(response, response.contains("[2:attribute1: '', attribute2: '']")); } public static class Bug56529 extends TagSupport { private static final long serialVersionUID = 1L; private String attribute1 = null; private String attribute2 = null; public void setAttribute1(String attribute1) { this.attribute1 = attribute1; } public String getAttribute1() { return attribute1; } public void setAttribute2(String attribute2) { this.attribute2 = attribute2; } public String getAttribute2() { return attribute2; } @Override public int doEndTag() throws JspException { try { pageContext.getOut().print("attribute1: '" + attribute1 + "', " + "attribute2: '" + attribute2 + "'"); } catch (IOException ioe) { throw new JspException(ioe); } return EVAL_PAGE; } } @Test public void testBug56581() throws LifecycleException { getTomcatInstanceTestWebapp(false, true); ByteChunk res = new ByteChunk(); try { getUrl("http://localhost:" + getPort() + "/test/bug5nnnn/bug56581.jsp", res, null); Assert.fail("An IOException was expected."); } catch (IOException ignore) { /* * ErrorReportValve flushes and aborts the connection when an unexpected error is encountered and response * has already been committed. It results in an exception here: java.io.IOException: Premature EOF */ } String result = res.toString(); Assert.assertTrue(result.startsWith("0 Hello world! ")); Assert.assertTrue(result.endsWith("999 Hello world! ")); } // https://bz.apache.org/bugzilla/show_bug.cgi?id=43400 @Test public void testTagsWithEnums() throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk res = getUrl("http://localhost:" + getPort() + "/test/bug43nnn/bug43400.jsp"); String result = res.toString(); System.out.println(result); assertEcho(result, "ASYNC"); } @Test public void testTrimSpacesExtended01() throws Exception { doTestTrimSpacesExtended(false); } @Test public void testTrimSpacesExtended02() throws Exception { doTestTrimSpacesExtended(true); } private void doTestTrimSpacesExtended(boolean removeBlankLines) throws Exception { Tomcat tomcat = getTomcatInstance(); File appDir = new File("test/webapp"); Context ctxt = tomcat.addContext("", appDir.getAbsolutePath()); ctxt.addServletContainerInitializer(new JasperInitializer(), null); Tomcat.initWebappDefaults(ctxt); Wrapper w = (Wrapper) ctxt.findChild("jsp"); if (removeBlankLines) { w.addInitParameter("trimSpaces", "extended"); } tomcat.start(); ByteChunk res = getUrl("http://localhost:" + getPort() + "/jsp/trim-spaces-extended.jsp"); String result = res.toString(); Scanner scanner = new Scanner(result); int blankLineCount = 0; while (scanner.hasNextLine()) { String line = scanner.nextLine(); if (line.length() == 0) { blankLineCount++; } } if (!removeBlankLines && blankLineCount == 0) { Assert.fail("TrimSpaceOptions.EXTENDED not configured but blank lines have been removed"); } else if (removeBlankLines && blankLineCount > 0) { Assert.fail("TrimSpaceOptions.EXTENDED does not allow the line to be just a new line character"); } scanner.close(); } @Test public void testEscape01() { String result = Generator.escape("\"\\ "); Assert.assertEquals("\\\"\\\\\ \ ", result); } @Test public void testEscape02() { String result = Generator.escape("\\"); Assert.assertEquals("\\\\", result); } @Test public void testEscape03() { String result = Generator.escape("xxx\\"); Assert.assertEquals("xxx\\\\", result); } @Test public void testEscape04() { String result = Generator.escape("\\xxx"); Assert.assertEquals("\\\\xxx", result); } @Test public void testQuote01() { String result = Generator.quote('\''); Assert.assertEquals("\'\\\'\'", result); } @Test public void testQuote02() { String result = Generator.quote('\\'); Assert.assertEquals("\'\\\\\'", result); } @Test public void testQuote03() { String result = Generator.quote(' '); Assert.assertEquals("\'\ \'", result); } @Test public void testQuote04() { String result = Generator.quote(' '); Assert.assertEquals("\'\ \'", result); } @Test public void testQuote05() { String result = Generator.quote('x'); Assert.assertEquals("\'x\'", result); } @Test public void testJspId() throws Exception { doTestJspId(false); } @Test public void testJspIdDocument() throws Exception { doTestJspId(true); } @Test public void testNonstandardSets() throws Exception { getTomcatInstanceTestWebapp(true, true); // This should break all subsequent requests ByteChunk body = new ByteChunk(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/set-01.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=testValue" + NEW_LINE + "request value=null" + NEW_LINE + "session value=null" + NEW_LINE + "application value=null", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/set-02.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=testValue" + NEW_LINE + "request value=null" + NEW_LINE + "session value=null" + NEW_LINE + "application value=null", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/set-03.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=null" + NEW_LINE + "request value=testValue" + NEW_LINE + "session value=null" + NEW_LINE + "application value=null", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/set-04.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=null" + NEW_LINE + "request value=null" + NEW_LINE + "session value=testValue" + NEW_LINE + "application value=null", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/set-05.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=null" + NEW_LINE + "request value=null" + NEW_LINE + "session value=null" + NEW_LINE + "application value=testValue", body.toString()); body.recycle(); } private void doTestJspId(boolean document) throws Exception { getTomcatInstanceTestWebapp(false, true); String uri = "http://localhost:" + getPort() + "/test/jsp/generator/jsp-id.jsp"; if (document) { uri += "x"; } ByteChunk res = getUrl(uri); String result = res.toString(); // Two tags should have different IDs String[] ids = new String[2]; int start = 0; int end = 0; for (int i = 0; i < ids.length; i++) { start = result.indexOf("Jsp ID is [", start) + 11; end = result.indexOf("]", start); ids[i] = result.substring(start, end); } // Confirm the IDs are not the same Assert.assertNotEquals(ids[0], ids[1]); } @Test public void testTryCatchFinally02() throws Exception { doTestJsp("try-catch-finally-02.jsp"); } public static class JspIdTag extends TagSupport implements JspIdConsumer { private static final long serialVersionUID = 1L; private volatile String jspId; @Override public int doStartTag() throws JspException { try { pageContext.getOut().print("<p>Jsp ID is [" + jspId + "]</p>"); } catch (IOException ioe) { throw new JspException(ioe); } return super.doStartTag(); } @Override public void setJspId(String jspId) { this.jspId = jspId; } } public static class TryCatchFinallyBodyTag extends BodyTagSupport implements TryCatchFinally { private static final long serialVersionUID = 1L; @Override public int doStartTag() throws JspException { try { pageContext.getOut().print("<p>OK</p>"); } catch (IOException ioe) { throw new JspException(ioe); } return super.doStartTag(); } @Override public void doCatch(Throwable t) throws Throwable { // NO-OP } @Override public void doFinally() { // NO-OP } } public static class TryCatchFinallyTag extends TagSupport implements TryCatchFinally { private static final long serialVersionUID = 1L; @Override public void doCatch(Throwable t) throws Throwable { // NO-OP } @Override public void doFinally() { // NO-OP } } public static class TesterBodyTag extends BodyTagSupport { private static final long serialVersionUID = 1L; @Override public int doStartTag() throws JspException { try { pageContext.getOut().print("<p>OK</p>"); } catch (IOException ioe) { throw new JspException(ioe); } return super.doStartTag(); } } public static class TesterTag implements Tag { private Tag parent; @Override public void setPageContext(PageContext pc) { } @Override public void setParent(Tag t) { parent = t; } @Override public Tag getParent() { return parent; } @Override public int doStartTag() throws JspException { return 0; } @Override public int doEndTag() throws JspException { return 0; } @Override public void release() { } } public static class TesterTagA extends TesterTag { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } } private static boolean tagTesterTagReleaseReleased = false; public static class TesterTagRelease extends TesterTag { private String data; public String getData() { return data; } public void setData(String data) { this.data = data; } @Override public void release() { tagTesterTagReleaseReleased = true; } } public static class DataPropertyEditor extends PropertyEditorSupport { } public static class TesterScriptingTag extends TagSupport { private static final long serialVersionUID = 1L; private String attribute02; private String attribute03; public String getAttribute02() { return attribute02; } public void setAttribute02(String attribute02) { this.attribute02 = attribute02; } public String getAttribute03() { return attribute03; } public void setAttribute03(String attribute03) { this.attribute03 = attribute03; } } public static class TesterScriptingTagB extends TagSupport { private static final long serialVersionUID = 1L; private String attribute02; public String getAttribute02() { return attribute02; } public void setAttribute02(String attribute02) { this.attribute02 = attribute02; } } public static class TesterScriptingTagBTEI extends TagExtraInfo { @Override public VariableInfo[] getVariableInfo(TagData data) { return new VariableInfo[] { new VariableInfo("variable01", "java.lang.String", true, VariableInfo.NESTED), new VariableInfo(data.getAttribute("attribute02").toString(), "java.lang.String", true, VariableInfo.NESTED), new VariableInfo("variable03", "java.lang.String", false, VariableInfo.NESTED) }; } } public static class TesterDynamicTag extends TagSupport implements DynamicAttributes { private static final long serialVersionUID = 1L; @Override public void setDynamicAttribute(String uri, String localName, Object value) throws JspException { // NO-OP } } public static class TesterAttributeTag extends TagSupport { private static final long serialVersionUID = 1L; private Object attribute01; private Object attribute02; private Object attribute03; private Object attribute04; private Object attribute05; private Object attribute06; public Object getAttribute01() { return attribute01; } public void setAttribute01(Object attribute01) { this.attribute01 = attribute01; } public Object getAttribute02() { return attribute02; } public void setAttribute02(Object attribute02) { this.attribute02 = attribute02; } public Object getAttribute03() { return attribute03; } public void setAttribute03(Object attribute03) { this.attribute03 = attribute03; } public Object getAttribute04() { return attribute04; } public void setAttribute04(Object attribute04) { this.attribute04 = attribute04; } public Object getAttribute05() { return attribute05; } public void setAttribute05(Object attribute05) { this.attribute05 = attribute05; } public Object getAttribute06() { return attribute06; } public void setAttribute06(Object attribute06) { this.attribute06 = attribute06; } } @Test public void testLambdaScriptlets() throws Exception { doTestJsp("lambda.jsp"); } @Test public void testInfoConflictNone() throws Exception { doTestJsp("info-conflict-none.jsp"); } @Test public void testInfoConflict() throws Exception { doTestJsp("info-conflict.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testTagWithVariable() throws Exception { doTestJsp("variable-tei-nested.jsp"); } @Test public void testTagWithVariableFromAttr() throws Exception { doTestJsp("variable-from-attr-nested.jsp"); } @Test public void testTagFileWithVariable() throws Exception { doTestJsp("variable-tagfile-nested.jsp"); } @Test public void testTagFileWithVariableFromAttr() throws Exception { doTestJsp("variable-tagfile-from-attr-nested.jsp"); } @Test public void testXpoweredBy() throws Exception { doTestJsp("x-powered-by.jsp"); } @Test public void testXmlProlog01() throws Exception { doTestJsp("xml-prolog-01.jspx"); } @Test public void testXmlProlog02() throws Exception { doTestJsp("xml-prolog-02.jspx"); } @Test public void testXmlPrologTag() throws Exception { doTestJsp("xml-prolog-tag.jspx"); } @Test public void testXmlDoctype01() throws Exception { doTestJsp("xml-doctype-01.jspx"); } @Test public void testXmlDoctype02() throws Exception { doTestJsp("xml-doctype-02.jspx"); } @Test public void testForward01() throws Exception { doTestJsp("forward-01.jsp"); } @Test public void testForward02() throws Exception { doTestJsp("forward-02.jsp"); } @Test public void testForward03() throws Exception { doTestJsp("forward-03.jsp"); } @Test public void testForward04() throws Exception { doTestJsp("forward-04.jsp"); } @Test public void testElement01() throws Exception { doTestJsp("element-01.jsp"); } @Test public void testInclude01() throws Exception { doTestJsp("include-01.jsp"); } @Test public void testSetProperty01() throws Exception { doTestJsp("setproperty-01.jsp"); } @Test public void testUseBean01() throws Exception { doTestJsp("usebean-01.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean02() throws Exception { doTestJsp("usebean-02.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean03() throws Exception { doTestJsp("usebean-03.jsp"); } @Test public void testUseBean04() throws Exception { doTestJsp("usebean-04.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean05() throws Exception { // Whether this test passes or fails depends on the Java version used // and the JRE settings. // For the test to pass use --illegal-access=deny // This is the default setting for Java 16 onwards doTestJsp("usebean-05.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean06() throws Exception { doTestJsp("usebean-06.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean07() throws Exception { doTestJsp("usebean-07.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testUseBean08() throws Exception { doTestJsp("usebean-08.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testCustomTag01() throws Exception { doTestJsp("try-catch-finally-01.jsp"); } @Test public void testCustomTag02() throws Exception { doTestJsp("customtag-02.jsp"); } @Test public void testCustomTag03() throws Exception { doTestJsp("customtag-03.jsp"); } @Test public void testCustomTag04() throws Exception { doTestJsp("customtag-04.jsp", HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } @Test public void testTemplateText01() throws Exception { doTestJsp("templatetext-01.jsp"); } @Test public void testTemplateText02() throws Exception { doTestJsp("templatetext-02.jsp"); } @Test public void testInvoke01() throws Exception { doTestJsp("invoke-01.jsp"); } @Test public void testDoBody01() throws Exception { doTestJsp("dobody-01.jsp"); } @Test public void testScriptingVariables01() throws Exception { doTestJsp("scriptingvariables-01.jsp"); } @Test public void testScriptingVariables02() throws Exception { doTestJsp("scriptingvariables-02.jsp"); } @Test public void testAttribute01() throws Exception { doTestJsp("attribute-01.jsp"); } @Test public void testAttribute02() throws Exception { doTestJsp("attribute-02.jsp"); } @Test public void testAttribute03() throws Exception { doTestJsp("attribute-03.jsp"); } @Test public void testAttribute04() throws Exception { doTestJsp("attribute-04.jsp"); } @Test public void testSetters01() throws Exception { doTestJsp("setters-01.jsp"); } @Test public void testCircular01() throws Exception { doTestJsp("circular-01.jsp"); } @Test public void testDeferredMethod01() throws Exception { doTestJsp("deferred-method-01.jsp"); } @Test public void testDeferredMethod02() throws Exception { doTestJsp("deferred-method-02.jsp"); } @Test public void testBeanInfo01() throws Exception { BeanInfo bi = Introspector.getBeanInfo(TesterTagA.class); for (PropertyDescriptor pd : bi.getPropertyDescriptors()) { if (pd.getName().equals("data")) { pd.setPropertyEditorClass(DataPropertyEditor.class); } } doTestJsp("beaninfo-01.jsp"); } @Test public void testBreakELInterpreter() throws Exception { getTomcatInstanceTestWebapp(false, true); // This should break all subsequent requests ByteChunk body = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/jsp/generator/break-el-interpreter.jsp", body, null); Assert.assertEquals(body.toString(), HttpServletResponse.SC_OK, rc); body.recycle(); rc = getUrl("http://localhost:" + getPort() + "/test/jsp/generator/info.jsp", body, null); Assert.assertEquals(body.toString(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR, rc); } @Test public void testBreakStringInterpreter() throws Exception { getTomcatInstanceTestWebapp(false, true); // This should break all subsequent requests ByteChunk body = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/jsp/generator/break-string-interpreter.jsp", body, null); Assert.assertEquals(body.toString(), HttpServletResponse.SC_OK, rc); body.recycle(); rc = getUrl("http://localhost:" + getPort() + "/test/jsp/generator/info.jsp", body, null); Assert.assertEquals(body.toString(), HttpServletResponse.SC_INTERNAL_SERVER_ERROR, rc); } @Test public void testBug65390() throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk body = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/bug6nnnn/bug65390.jsp", body, null); Assert.assertEquals(body.toString(), HttpServletResponse.SC_OK, rc); } @Test public void testBug69508() throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk body = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/bug6nnnn/bug69508.jsp?init=InitCommand", body, null); String text = body.toString(); Assert.assertEquals(text, HttpServletResponse.SC_OK, rc); // include page URL with param cmd Assert.assertTrue(text, text.contains("<p>cmd - someCommand</p>")); Assert.assertTrue(text, text.contains("<p>param1 - value1</p>")); Assert.assertTrue(text, text.contains("<p>cmd - someCommandAbs</p>")); Assert.assertTrue(text, text.contains("<p>param1 - value1Abs</p>")); // include page URL without param Assert.assertTrue(text, text.contains("<p>param2 - value2</p>")); Assert.assertTrue(text, text.contains("<p>param2 - value2Abs</p>")); Assert.assertTrue(text, text.contains("<p>param3 - InitCommand</p>")); Assert.assertTrue(text, text.contains("<p>param3 - InitCommandAbs</p>")); Assert.assertTrue(text, text.contains("<p>param4 - value4</p>")); Assert.assertTrue(text, text.contains("<p>param4 - value4Abs</p>")); Assert.assertTrue(text, text.contains("<p>param5 - InitCommand</p>")); Assert.assertTrue(text, text.contains("<p>param5 - InitCommandAbs</p>")); Assert.assertTrue(text, text.contains("<p>param6 - value6</p>")); Assert.assertTrue(text, text.contains("<p>param6 - value6Abs</p>")); } @Test public void testTagReleaseWithPooling() throws Exception { doTestTagRelease(true); } @Test public void testTagReleaseWithoutPooling() throws Exception { doTestTagRelease(false); } public void doTestTagRelease(boolean enablePooling) throws Exception { tagTesterTagReleaseReleased = false; Tomcat tomcat = getTomcatInstance(); File appDir = new File("test/webapp"); Context ctxt = tomcat.addContext("", appDir.getAbsolutePath()); ctxt.addServletContainerInitializer(new JasperInitializer(), null); Tomcat.initWebappDefaults(ctxt); Wrapper w = (Wrapper) ctxt.findChild("jsp"); w.addInitParameter("enablePooling", String.valueOf(enablePooling)); tomcat.start(); getUrl("http://localhost:" + getPort() + "/jsp/generator/release.jsp"); if (enablePooling) { Assert.assertFalse(tagTesterTagReleaseReleased); } else { Assert.assertTrue(tagTesterTagReleaseReleased); } } private void doTestJsp(String jspName) throws Exception { doTestJsp(jspName, HttpServletResponse.SC_OK); } private void doTestJsp(String jspName, int expectedResponseCode) throws Exception { getTomcatInstanceTestWebapp(false, true); ByteChunk body = new ByteChunk(); int rc = getUrl("http://localhost:" + getPort() + "/test/jsp/generator/" + jspName, body, null); Assert.assertEquals(body.toString(), expectedResponseCode, rc); } @Test public void testNonstandardRemoves() throws Exception { getTomcatInstanceTestWebapp(true, true); // This should break all subsequent requests ByteChunk body = new ByteChunk(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/remove-01.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=null" + NEW_LINE + "request value=testValue" + NEW_LINE + "session value=testValue" + NEW_LINE + "application value=testValue", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/remove-02.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=testValue" + NEW_LINE + "request value=null" + NEW_LINE + "session value=testValue" + NEW_LINE + "application value=testValue", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/remove-03.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=testValue" + NEW_LINE + "request value=testValue" + NEW_LINE + "session value=null" + NEW_LINE + "application value=testValue", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/remove-04.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=testValue" + NEW_LINE + "request value=testValue" + NEW_LINE + "session value=testValue" + NEW_LINE + "application value=null", body.toString()); body.recycle(); getUrl("http://localhost:" + getPort() + "/test/jsp/generator/nonstandard/remove-05.jsp", body, null); Assert.assertEquals(NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + NEW_LINE + "pageContext value=null" + NEW_LINE + "request value=null" + NEW_LINE + "session value=null" + NEW_LINE + "application value=null", body.toString()); body.recycle(); } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
3.59
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-4bde3f57-78aa-4201-96bf-531cba09e7de apache-2.0 Apache-2.0
URL Start line End line
http://www.apache.org/licenses/LICENSE-2.0 9 9
https://bz.apache.org/bugzilla/show_bug.cgi?id=43400 278 278