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