Author: markt
Date: Fri Apr  6 20:11:55 2018
New Revision: 1828559

URL: http://svn.apache.org/viewvc?rev=1828559&view=rev
Log:
SpotBugs
Fixes for Jasper (rank 17 and above)

Modified:
    tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java
    tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java
    tomcat/trunk/res/findbugs/filter-false-positives.xml

Modified: tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java?rev=1828559&r1=1828558&r2=1828559&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java (original)
+++ tomcat/trunk/java/org/apache/jasper/el/JasperELResolver.java Fri Apr  6 
20:11:55 2018
@@ -18,6 +18,7 @@
 package org.apache.jasper.el;
 
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.el.ArrayELResolver;
 import javax.el.BeanELResolver;
@@ -41,15 +42,14 @@ public class JasperELResolver extends Co
 
     private static final int STANDARD_RESOLVERS_COUNT = 9;
 
-    private int size;
-    private ELResolver[] resolvers;
+    private AtomicInteger resolversSize = new AtomicInteger(0);
+    private volatile ELResolver[] resolvers;
     private final int appResolversSize;
 
     public JasperELResolver(List<ELResolver> appResolvers,
             ELResolver streamResolver) {
         appResolversSize = appResolvers.size();
         resolvers = new ELResolver[appResolversSize + 
STANDARD_RESOLVERS_COUNT];
-        size = 0;
 
         add(new ImplicitObjectELResolver());
         for (ELResolver appResolver : appResolvers) {
@@ -69,6 +69,8 @@ public class JasperELResolver extends Co
     public synchronized void add(ELResolver elResolver) {
         super.add(elResolver);
 
+        int size = resolversSize.get();
+
         if (resolvers.length > size) {
             resolvers[size] = elResolver;
         } else {
@@ -78,7 +80,7 @@ public class JasperELResolver extends Co
 
             resolvers = nr;
         }
-        size ++;
+        resolversSize.incrementAndGet();
     }
 
     @Override
@@ -106,6 +108,7 @@ public class JasperELResolver extends Co
             start = 1;
         }
 
+        int size = resolversSize.get();
         for (int i = start; i < size; i++) {
             result = resolvers[i].getValue(context, base, property);
             if (context.isPropertyResolved()) {
@@ -143,6 +146,7 @@ public class JasperELResolver extends Co
         // skip collection (map, resource, list, and array) resolvers
         index += 4;
         // call bean and the rest of resolvers
+        int size = resolversSize.get();
         for (int i = index; i < size; i++) {
             result = resolvers[i].invoke(
                     context, base, targetMethod, paramTypes, params);

Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java?rev=1828559&r1=1828558&r2=1828559&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/JspServletWrapper.java Fri Apr  
6 20:11:55 2018
@@ -89,7 +89,7 @@ public class JspServletWrapper {
     private long available = 0L;
     private final ServletConfig config;
     private final Options options;
-    private boolean firstTime = true;
+    private volatile boolean firstTime = true;
     /** Whether the servlet needs reloading on next access */
     private volatile boolean reload = true;
     private final boolean isTagFile;

Modified: tomcat/trunk/res/findbugs/filter-false-positives.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/res/findbugs/filter-false-positives.xml?rev=1828559&r1=1828558&r2=1828559&view=diff
==============================================================================
--- tomcat/trunk/res/findbugs/filter-false-positives.xml (original)
+++ tomcat/trunk/res/findbugs/filter-false-positives.xml Fri Apr  6 20:11:55 
2018
@@ -824,7 +824,16 @@
          silence an Eclipse warning -->
     <Class name="org.apache.jasper.compiler.ELFunctionMapper"/>
     <Method name="map"/>
-    <Bug code="DLS"/>
+    <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
+  </Match>
+  <Match>
+    <!-- Sync is not protecting these fields -->
+    <Class name="org.apache.jasper.compiler.JspConfig"/>
+    <Or>
+      <Field name="defaultDeferedSyntaxAllowedAsLiteral" />
+      <Field name="defaultIsELIgnored" />
+    </Or>
+    <Bug pattern="IS2_INCONSISTENT_SYNC"/>
   </Match>
   <Match>
     <!-- NPE is not possible -->
@@ -836,7 +845,10 @@
     <!-- Yes this is a dead store. This is so the IDE warning can be 
suppressed.
          The object creation has side-effects so the code is required. -->
     <Class name="org.apache.jasper.compiler.JspDocumentParser" />
-    <Method name="comment"/>
+    <Or>
+      <Method name="comment"/>
+      <Method name="processChars"/>
+    </Or>
     <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
   </Match>
   <Match>
@@ -869,6 +881,12 @@
     <Bug code="NP" />
   </Match>
   <Match>
+    <!-- Array contents are not mutated -->
+    <Class name="org.apache.jasper.el.JasperELResolver"/>
+    <Field name="resolvers" />
+    <Bug pattern="VO_VOLATILE_REFERENCE_TO_ARRAY" />
+  </Match>
+  <Match>
     <!-- base null is handled by this resolver -->
     <Class name="org.apache.jasper.el.JasperELResolver"/>
     <Method name="getValue" />



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

Reply via email to