Author: markt Date: Wed Nov 11 20:46:09 2015 New Revision: 1713931 URL: http://svn.apache.org/viewvc?rev=1713931&view=rev Log: FindBugs fixes
Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java tomcat/trunk/java/org/apache/catalina/startup/ClassLoaderFactory.java tomcat/trunk/java/org/apache/catalina/startup/HomesUserDatabase.java tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java tomcat/trunk/java/org/apache/jasper/JspC.java tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java tomcat/trunk/res/findbugs/filter-false-positives.xml tomcat/trunk/test/org/apache/tomcat/util/bcel/TesterPerformance.java Modified: tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/JDBCStore.java Wed Nov 11 20:46:09 2015 @@ -889,15 +889,11 @@ public class JDBCStore extends StoreBase try { Class<?> clazz = Class.forName(driverName); driver = (Driver) clazz.newInstance(); - } catch (ClassNotFoundException ex) { - manager.getContext().getLogger().error(sm.getString(getStoreName() + ".checkConnectionClassNotFoundException", - ex.toString())); - } catch (InstantiationException ex) { - manager.getContext().getLogger().error(sm.getString(getStoreName() + ".checkConnectionClassNotFoundException", - ex.toString())); - } catch (IllegalAccessException ex) { - manager.getContext().getLogger().error(sm.getString(getStoreName() + ".checkConnectionClassNotFoundException", - ex.toString())); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) { + manager.getContext().getLogger().error( + sm.getString(getStoreName() + ".checkConnectionClassNotFoundException", + e.toString())); + throw new SQLException(e); } } Modified: tomcat/trunk/java/org/apache/catalina/startup/ClassLoaderFactory.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ClassLoaderFactory.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ClassLoaderFactory.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ClassLoaderFactory.java Wed Nov 11 20:46:09 2015 @@ -102,6 +102,9 @@ public final class ClassLoaderFactory { if (!directory.isDirectory() || !directory.canRead()) continue; String filenames[] = directory.list(); + if (filenames == null) { + continue; + } for (int j = 0; j < filenames.length; j++) { String filename = filenames[j].toLowerCase(Locale.ENGLISH); if (!filename.endsWith(".jar")) @@ -189,6 +192,9 @@ public final class ClassLoaderFactory { log.debug(" Including directory glob " + directory.getAbsolutePath()); String filenames[] = directory.list(); + if (filenames == null) { + continue; + } for (int j = 0; j < filenames.length; j++) { String filename = filenames[j].toLowerCase(Locale.ENGLISH); if (!filename.endsWith(".jar")) Modified: tomcat/trunk/java/org/apache/catalina/startup/HomesUserDatabase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/HomesUserDatabase.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/HomesUserDatabase.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/HomesUserDatabase.java Wed Nov 11 20:46:09 2015 @@ -131,6 +131,9 @@ public final class HomesUserDatabase if (!homeBaseDir.exists() || !homeBaseDir.isDirectory()) return; String homeBaseFiles[] = homeBaseDir.list(); + if (homeBaseFiles == null) { + return; + } for (int i = 0; i < homeBaseFiles.length; i++) { File homeDir = new File(homeBaseDir, homeBaseFiles[i]); @@ -138,9 +141,5 @@ public final class HomesUserDatabase continue; homes.put(homeBaseFiles[i], homeDir.toString()); } - - } - - } Modified: tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java (original) +++ tomcat/trunk/java/org/apache/catalina/util/ExtensionValidator.java Wed Nov 11 20:46:09 2015 @@ -354,6 +354,9 @@ public final class ExtensionValidator { continue; } File[] files = targetDir.listFiles(); + if (files == null) { + continue; + } for (int i = 0; i < files.length; i++) { if (files[i].getName().toLowerCase(Locale.ENGLISH).endsWith(".jar") && files[i].isFile()) { Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java (original) +++ tomcat/trunk/java/org/apache/coyote/http2/Http2UpgradeHandler.java Wed Nov 11 20:46:09 2015 @@ -931,6 +931,7 @@ public class Http2UpgradeHandler extends private void pruneClosedStreams() { // Only prune every 10 new streams if (newStreamsSinceLastPrune < 9) { + // Not atomic. Increments may be lost. Not a problem. newStreamsSinceLastPrune++; return; } Modified: tomcat/trunk/java/org/apache/jasper/JspC.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspC.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/JspC.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspC.java Wed Nov 11 20:46:09 2015 @@ -1577,26 +1577,28 @@ public class JspC extends Task implement File lib = new File(webappBase, "/WEB-INF/lib"); if (lib.exists() && lib.isDirectory()) { String[] libs = lib.list(); - for (int i = 0; i < libs.length; i++) { - if( libs[i].length() <5 ) continue; - String ext=libs[i].substring( libs[i].length() - 4 ); - if (! ".jar".equalsIgnoreCase(ext)) { - if (".tld".equalsIgnoreCase(ext)) { - log.warn("TLD files should not be placed in " - + "/WEB-INF/lib"); + if (libs != null) { + for (int i = 0; i < libs.length; i++) { + if( libs[i].length() <5 ) continue; + String ext=libs[i].substring( libs[i].length() - 4 ); + if (! ".jar".equalsIgnoreCase(ext)) { + if (".tld".equalsIgnoreCase(ext)) { + log.warn("TLD files should not be placed in " + + "/WEB-INF/lib"); + } + continue; + } + try { + File libFile = new File(lib, libs[i]); + classPath = classPath + File.pathSeparator + + libFile.getAbsolutePath(); + urls.add(libFile.getAbsoluteFile().toURI().toURL()); + } catch (IOException ioe) { + // failing a toCanonicalPath on a file that + // exists() should be a JVM regression test, + // therefore we have permission to freak out + throw new RuntimeException(ioe.toString()); } - continue; - } - try { - File libFile = new File(lib, libs[i]); - classPath = classPath + File.pathSeparator - + libFile.getAbsolutePath(); - urls.add(libFile.getAbsoluteFile().toURI().toURL()); - } catch (IOException ioe) { - // failing a toCanonicalPath on a file that - // exists() should be a JVM regression test, - // therefore we have permission to freak out - throw new RuntimeException(ioe.toString()); } } } Modified: tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/JspCServletContext.java Wed Nov 11 20:46:09 2015 @@ -389,6 +389,9 @@ public class JspCServletContext implemen if (!theBaseDir.exists() || !theBaseDir.isDirectory()) return (thePaths); String theFiles[] = theBaseDir.list(); + if (theFiles == null) { + return thePaths; + } for (int i = 0; i < theFiles.length; i++) { File testFile = new File(basePath + File.separator + theFiles[i]); if (testFile.isFile()) Modified: tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java (original) +++ tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java Wed Nov 11 20:46:09 2015 @@ -344,8 +344,9 @@ public class TldScanner { public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { - if (!file.getFileName().toString() - .toLowerCase(Locale.ENGLISH).endsWith(TLD_EXT)) { + Path fileName = file.getFileName(); + if (fileName == null || !fileName.toString().toLowerCase( + Locale.ENGLISH).endsWith(TLD_EXT)) { return FileVisitResult.CONTINUE; } Modified: tomcat/trunk/res/findbugs/filter-false-positives.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/res/findbugs/filter-false-positives.xml?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/res/findbugs/filter-false-positives.xml (original) +++ tomcat/trunk/res/findbugs/filter-false-positives.xml Wed Nov 11 20:46:09 2015 @@ -183,6 +183,21 @@ <Bug code="NS"/> </Match> <Match> + <!-- Sync is to protect construction of data not individual fields --> + <Class name="org.apache.catalina.tribes.membership.MemberImpl"/> + <Or> + <Method name="getCommand"/> + <Method name="getDomain"/> + <Method name="getHost"/> + <Method name="getPayload"/> + <Method name="getPort"/> + <Method name="getSecurePort"/> + <Method name="getUdpPort"/> + <Method name="getUniqueId"/> + </Or> + <Bug pattern="UG_SYNC_SET_UNSYNC_GET"/> + </Match> + <Match> <!-- Intentional in case thread is waiting --> <Class name="org.apache.catalina.tribes.transport.RxTaskPool"/> <Method name="returnWorker"/> @@ -201,6 +216,17 @@ <Bug code="SQL" /> </Match> <Match> + <!-- Use of synchronisation is required to make a sequence of calls in --> + <!-- one method appear to be atomic. --> + <Class name="org.apache.coyote.AbstractProcessorLight"/> + <Or> + <Method name="addDispatch"/> + <Method name="getIteratorAndClearDispatches"/> + <Method name="clearDispatches"/> + </Or> + <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER" /> + </Match> + <Match> <!-- Correct behaviour does not assume sequential operations on concurrent hash map are atomic. --> <Class name="org.apache.coyote.AbstractProtocol$AbstractConnectionHandler" /> @@ -242,6 +268,12 @@ <Bug pattern="IM_BAD_CHECK_FOR_ODD" /> </Match> <Match> + <!-- Loss of the occasional increment is acceptable. --> + <Class name="org.apache.coyote.http2.Http2UpgradeHandler" /> + <Method name="pruneClosedStreams" /> + <Bug pattern="VO_VOLATILE_INCREMENT" /> + </Match> + <Match> <!-- Notify is correct. Condition changed outside of this method. --> <Class name="org.apache.coyote.http2.Http2UpgradeHandler" /> <Mehtod name="releaseBackLog" /> @@ -465,6 +497,15 @@ <Bug code="ML" /> </Match> <Match> + <!-- Modifications to SocketLists are always protected by syncs --> + <Class name="org.apache.tomcat.util.net.AprEndpoint$SocketList"/> + <Or> + <Method name="add"/> + <Method name="remove"/> + </Or> + <Bug pattern="VO_VOLATILE_INCREMENT"/> + </Match> + <Match> <!-- Object is only ever set to null, sync therefore is still valid --> <Class name="org.apache.tomcat.util.net.AprEndpoint$SocketProcessor"/> <Method name="run"/> @@ -498,17 +539,6 @@ <Bug code="DE" /> </Match> <Match> - <!-- Use of synchronisation is required to make a sequence of calls in --> - <!-- one method appear to be atomic. --> - <Class name="org.apache.tomcat.util.net.SocketWrapper"/> - <Or> - <Method name="addDispatch"/> - <Method name="getIteratorAndClearDispatches"/> - <Method name="clearDispatches"/> - </Or> - <Bug pattern="JLM_JSR166_UTILCONCURRENT_MONITORENTER" /> - </Match> - <Match> <!-- Yes the simple name is the same as the super class. Accept it. --> <Class name="org.apache.tomcat.util.threads.ThreadPoolExecutor" /> <Bug code="Nm" /> @@ -691,8 +721,8 @@ <Match> <!-- Code is deliberately unused --> <Or> - <Class name="org.apache.catalina.webresources.AbstractTestDirResourceSet" /> <Class name="org.apache.catalina.webresources.AbstractTestFileResourceSet" /> + <Class name="org.apache.catalina.webresources.TestDirResourceSet" /> <Class name="org.apache.catalina.webresources.TestJarResourceSet" /> <Class name="org.apache.catalina.webresources.TestJarResourceSetInternal" /> </Or> @@ -734,6 +764,22 @@ <Bug code="RR" /> </Match> <Match> + <Class name="org.apache.tomcat.util.threads.TestLimitLatch" /> + <Or> + <Method name="waitForThreadToStop" /> + <Method name="testTenWait" /> + </Or> + <Bug pattern="NN_NAKED_NOTIFY " /> + </Match> + <Match> + <Class name="org.apache.tomcat.util.threads.TestLimitLatch$TestThread" /> + <Method name="run" /> + <Or> + <Bug pattern="WA_NOT_IN_LOOP" /> + <Bug pattern="UW_UNCOND_WAIT " /> + </Or> + </Match> + <Match> <!-- Code is deliberately unused --> <Class name="org.apache.tomcat.websocket.server.TestUriTemplate" /> <Or> Modified: tomcat/trunk/test/org/apache/tomcat/util/bcel/TesterPerformance.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/bcel/TesterPerformance.java?rev=1713931&r1=1713930&r2=1713931&view=diff ============================================================================== --- tomcat/trunk/test/org/apache/tomcat/util/bcel/TesterPerformance.java (original) +++ tomcat/trunk/test/org/apache/tomcat/util/bcel/TesterPerformance.java Wed Nov 11 20:46:09 2015 @@ -24,6 +24,7 @@ import java.util.HashSet; import java.util.Locale; import java.util.Set; +import org.junit.Assert; import org.junit.Test; import org.apache.tomcat.util.bcel.classfile.ClassParser; @@ -39,6 +40,8 @@ public class TesterPerformance { File libDir = new File(JAR_LOCATION); String[] libs = libDir.list(); + Assert.assertNotNull(libs); + Set<URL> jarURLs = new HashSet<>(); for (String lib : libs) { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org