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 2022/09/27 09:10:55 UTC

[tomcat] branch 9.0.x updated: Fix BZ 66277 - fix regressions in Stack -> Deque refactoring

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new c23856daa7 Fix BZ 66277 - fix regressions in Stack -> Deque refactoring
c23856daa7 is described below

commit c23856daa7ab7a1d833e2ddd5dfba98af0d57aa5
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Sep 27 10:03:06 2022 +0100

    Fix BZ 66277 - fix regressions in Stack -> Deque refactoring
---
 java/org/apache/catalina/core/StandardContext.java |  6 +++---
 .../apache/catalina/servlets/WebdavServlet.java    | 10 +++++-----
 .../apache/jasper/compiler/ParserController.java   |  8 ++++----
 .../apache/tomcat/util/log/SystemLogHandler.java   |  7 ++++---
 .../apache/catalina/core/TestStandardContext.java  | 23 ++++++++++++++++++++++
 webapps/docs/changelog.xml                         |  8 ++++++++
 6 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/java/org/apache/catalina/core/StandardContext.java b/java/org/apache/catalina/core/StandardContext.java
index 819746e590..ef4ab40c78 100644
--- a/java/org/apache/catalina/core/StandardContext.java
+++ b/java/org/apache/catalina/core/StandardContext.java
@@ -28,6 +28,7 @@ import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Deque;
 import java.util.Enumeration;
 import java.util.EventListener;
 import java.util.HashMap;
@@ -37,7 +38,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Queue;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
@@ -5924,10 +5924,10 @@ public class StandardContext extends ContainerBase
             if (parent == null) {
             namingContextName = getName();
             } else {
-            Queue<String> stk = new ArrayDeque<>();
+            Deque<String> stk = new ArrayDeque<>();
             StringBuilder buff = new StringBuilder();
             while (parent != null) {
-                stk.add(parent.getName());
+                stk.addFirst(parent.getName());
                 parent = parent.getParent();
             }
             while (!stk.isEmpty()) {
diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java
index 9e54acbf77..b122d401d4 100644
--- a/java/org/apache/catalina/servlets/WebdavServlet.java
+++ b/java/org/apache/catalina/servlets/WebdavServlet.java
@@ -29,12 +29,12 @@ import java.util.ArrayDeque;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
+import java.util.Deque;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Queue;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -617,11 +617,11 @@ public class WebdavServlet extends DefaultServlet {
             parseProperties(req, generatedXML, path, type, properties);
         } else {
             // The stack always contains the object of the current level
-            Queue<String> stack = new ArrayDeque<>();
-            stack.add(path);
+            Deque<String> stack = new ArrayDeque<>();
+            stack.addFirst(path);
 
             // Stack of the objects one level below
-            Queue<String> stackBelow = new ArrayDeque<>();
+            Deque<String> stackBelow = new ArrayDeque<>();
 
             while ((!stack.isEmpty()) && (depth >= 0)) {
 
@@ -639,7 +639,7 @@ public class WebdavServlet extends DefaultServlet {
                             newPath += "/";
                         }
                         newPath += entry;
-                        stackBelow.add(newPath);
+                        stackBelow.addFirst(newPath);
                     }
 
                     // Displaying the lock-null resources present in that
diff --git a/java/org/apache/jasper/compiler/ParserController.java b/java/org/apache/jasper/compiler/ParserController.java
index 362e5ae2f4..e32d24c1bf 100644
--- a/java/org/apache/jasper/compiler/ParserController.java
+++ b/java/org/apache/jasper/compiler/ParserController.java
@@ -21,7 +21,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayDeque;
-import java.util.Queue;
+import java.util.Deque;
 
 import org.apache.jasper.JasperException;
 import org.apache.jasper.JspCompilationContext;
@@ -56,7 +56,7 @@ class ParserController implements TagConstants {
      * A stack to keep track of the 'current base directory'
      * for include directives that refer to relative paths.
      */
-    private final Queue<String> baseDirStack = new ArrayDeque<>();
+    private final Deque<String> baseDirStack = new ArrayDeque<>();
 
     private boolean isEncodingSpecifiedInProlog;
     private boolean isBomPresent;
@@ -519,9 +519,9 @@ class ParserController implements TagConstants {
     private String resolveFileName(String inFileName) {
         String fileName = inFileName.replace('\\', '/');
         boolean isAbsolute = fileName.startsWith("/");
-        fileName = isAbsolute ? fileName : baseDirStack.peek() + fileName;
+        fileName = isAbsolute ? fileName : baseDirStack.peekFirst() + fileName;
         String baseDir = fileName.substring(0, fileName.lastIndexOf('/') + 1);
-        baseDirStack.add(baseDir);
+        baseDirStack.addFirst(baseDir);
         return fileName;
     }
 
diff --git a/java/org/apache/tomcat/util/log/SystemLogHandler.java b/java/org/apache/tomcat/util/log/SystemLogHandler.java
index 746ae4ffb0..2293f349af 100644
--- a/java/org/apache/tomcat/util/log/SystemLogHandler.java
+++ b/java/org/apache/tomcat/util/log/SystemLogHandler.java
@@ -19,6 +19,7 @@ package org.apache.tomcat.util.log;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.util.ArrayDeque;
+import java.util.Deque;
 import java.util.EmptyStackException;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -62,7 +63,7 @@ public class SystemLogHandler extends PrintStream {
     /**
      * Thread &lt;-&gt; CaptureLog associations.
      */
-    private static final ThreadLocal<Queue<CaptureLog>> logs = new ThreadLocal<>();
+    private static final ThreadLocal<Deque<CaptureLog>> logs = new ThreadLocal<>();
 
 
     /**
@@ -88,12 +89,12 @@ public class SystemLogHandler extends PrintStream {
         } else {
             log = new CaptureLog();
         }
-        Queue<CaptureLog> stack = logs.get();
+        Deque<CaptureLog> stack = logs.get();
         if (stack == null) {
             stack = new ArrayDeque<>();
             logs.set(stack);
         }
-        stack.add(log);
+        stack.addFirst(log);
     }
 
 
diff --git a/test/org/apache/catalina/core/TestStandardContext.java b/test/org/apache/catalina/core/TestStandardContext.java
index eff658246c..fe2f49c40e 100644
--- a/test/org/apache/catalina/core/TestStandardContext.java
+++ b/test/org/apache/catalina/core/TestStandardContext.java
@@ -19,6 +19,7 @@ package org.apache.catalina.core;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
@@ -52,6 +53,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import org.apache.catalina.Context;
+import org.apache.catalina.Engine;
 import org.apache.catalina.Host;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
@@ -1043,4 +1045,25 @@ public class TestStandardContext extends TomcatBaseTest {
             resp.getWriter().print("OK");
         }
     }
+
+
+    @Test
+    public void testNamingContextName() throws Exception {
+        Engine engine = new StandardEngine();
+        engine.setName("engine");
+
+        Host host = new StandardHost();
+        host.setName("host");
+        host.setParent(engine);
+
+        Context context = new StandardContext();
+        context.setName("context");
+        context.setParent(host);
+
+        Method m = StandardContext.class.getDeclaredMethod("getNamingContextName");
+        m.setAccessible(true);
+        String result = (String) m.invoke(context);
+
+        Assert.assertEquals("/engine/hostcontext", result);
+    }
 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 9f5b617766..7394872d6c 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -113,6 +113,14 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name="Jasper">
+    <changelog>
+      <fix>
+        <bug>66277</bug>: Fix regressions in refactoring from <code>Stack</code>
+        <code>ArrayDeque</code>.
+      </fix>
+    </changelog>
+  </subsection>
 </section>
 <section name="Tomcat 9.0.67 (remm)" rtext="2022-09-26">
   <subsection name="Coyote">


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