about 20 findbugs fixes all over

This commit is contained in:
zzz
2013-11-10 20:07:46 +00:00
parent 0a8f79f0e3
commit d2a1025b3f
16 changed files with 92 additions and 38 deletions

View File

@ -232,7 +232,7 @@ public class Snark
private byte[] id; private byte[] id;
private final byte[] infoHash; private final byte[] infoHash;
private String additionalTrackerURL; private String additionalTrackerURL;
private final I2PSnarkUtil _util; protected final I2PSnarkUtil _util;
private final Log _log; private final Log _log;
private final PeerCoordinatorSet _peerCoordinatorSet; private final PeerCoordinatorSet _peerCoordinatorSet;
private volatile String trackerProblems; private volatile String trackerProblems;

View File

@ -531,7 +531,7 @@ public class SnarkManager implements CompleteListener {
_util.setStartupDelay(minutes); _util.setStartupDelay(minutes);
changed = true; changed = true;
_config.setProperty(PROP_STARTUP_DELAY, Integer.toString(minutes)); _config.setProperty(PROP_STARTUP_DELAY, Integer.toString(minutes));
addMessage(_("Startup delay changed to {0}", DataHelper.formatDuration2(minutes * 60 * 1000))); addMessage(_("Startup delay changed to {0}", DataHelper.formatDuration2(minutes * (60L * 1000))));
} }
} }
@ -1489,7 +1489,7 @@ public class SnarkManager implements CompleteListener {
private class DirMonitor implements Runnable { private class DirMonitor implements Runnable {
public void run() { public void run() {
// don't bother delaying if auto start is false // don't bother delaying if auto start is false
long delay = 60 * 1000 * getStartupDelayMinutes(); long delay = (60L * 1000) * getStartupDelayMinutes();
if (delay > 0 && shouldAutoStart()) { if (delay > 0 && shouldAutoStart()) {
addMessage(_("Adding torrents in {0}", DataHelper.formatDuration2(delay))); addMessage(_("Adding torrents in {0}", DataHelper.formatDuration2(delay)));
try { Thread.sleep(delay); } catch (InterruptedException ie) {} try { Thread.sleep(delay); } catch (InterruptedException ie) {}

View File

@ -60,7 +60,7 @@ public class BDecoder
private int indicator = 0; private int indicator = 0;
// Used for ugly hack to get SHA hash over the metainfo info map // Used for ugly hack to get SHA hash over the metainfo info map
private final String special_map = "info"; private static final String special_map = "info";
private boolean in_special_map = false; private boolean in_special_map = false;
/** creation deferred until we encounter the special map, to make processing of announce replies more efficient */ /** creation deferred until we encounter the special map, to make processing of announce replies more efficient */
private MessageDigest sha_digest; private MessageDigest sha_digest;

View File

@ -36,6 +36,7 @@ import javax.servlet.http.HttpServletResponse;
import net.i2p.I2PAppContext; import net.i2p.I2PAppContext;
import net.i2p.data.ByteArray; import net.i2p.data.ByteArray;
import net.i2p.data.DataHelper;
import net.i2p.util.ByteCache; import net.i2p.util.ByteCache;
import net.i2p.util.Log; import net.i2p.util.Log;
import net.i2p.util.SystemVersion; import net.i2p.util.SystemVersion;
@ -469,7 +470,7 @@ class BasicServlet extends HttpServlet
{ {
String cpath = getServletContext().getContextPath(); String cpath = getServletContext().getContextPath();
// this won't work if we aren't at top level // this won't work if we aren't at top level
String cname = cpath == "" ? "i2psnark" : cpath.substring(1).replace("/", "_"); String cname = "".equals(cpath) ? "i2psnark" : cpath.substring(1).replace("/", "_");
return (new File(_context.getBaseDir(), "webapps/" + cname + ".war")).lastModified(); return (new File(_context.getBaseDir(), "webapps/" + cname + ".war")).lastModified();
} }
@ -578,7 +579,7 @@ class BasicServlet extends HttpServlet
byte[] buf = ba.getData(); byte[] buf = ba.getData();
try { try {
if (skip > 0) if (skip > 0)
in.skip(skip); DataHelper.skip(in, skip);
int read = 0; int read = 0;
long tot = 0; long tot = 0;
boolean done = false; boolean done = false;

View File

@ -198,7 +198,7 @@ public class FetchAndAdd extends Snark implements EepGet.StatusListener, Runnabl
//_total = -1; //_total = -1;
_transferred = 0; _transferred = 0;
_failCause = null; _failCause = null;
_started = _ctx.clock().now(); _started = _util.getContext().clock().now();
_isRunning = true; _isRunning = true;
_active = false; _active = false;
_thread = new I2PAppThread(this, "Torrent File EepGet", true); _thread = new I2PAppThread(this, "Torrent File EepGet", true);

View File

@ -71,7 +71,7 @@ abstract class IRCFilter {
// Allow numerical responses // Allow numerical responses
try { try {
Integer.valueOf(command); Integer.parseInt(command);
return s; return s;
} catch(NumberFormatException nfe){} } catch(NumberFormatException nfe){}

View File

@ -238,8 +238,8 @@ public class ConfigNetHelper extends HelperBase {
return kbytesToBits(getShareBandwidth()); return kbytesToBits(getShareBandwidth());
} }
private String kbytesToBits(int kbytes) { private String kbytesToBits(int kbytes) {
return DataHelper.formatSize(kbytes * 8 * 1024) + ' ' + _("bits per second") + return DataHelper.formatSize(kbytes * (8 * 1024L)) + ' ' + _("bits per second") +
' ' + _("or {0} bytes per month maximum", DataHelper.formatSize(kbytes * 1024l * 60 * 60 * 24 * 31)); ' ' + _("or {0} bytes per month maximum", DataHelper.formatSize(kbytes * (1024L * 60 * 60 * 24 * 31)));
} }
public String getInboundBurstRate() { public String getInboundBurstRate() {
return "" + _context.bandwidthLimiter().getInboundBurstKBytesPerSecond(); return "" + _context.bandwidthLimiter().getInboundBurstKBytesPerSecond();

View File

@ -435,11 +435,11 @@ public class MultiPartRequest
} }
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
private class Part private static class Part
{ {
String _name=null; String _name;
String _filename=null; String _filename;
Hashtable _headers= new Hashtable(10); Hashtable _headers= new Hashtable(10);
byte[] _data=null; byte[] _data;
} }
}; };

View File

@ -14,30 +14,30 @@ abstract class CPUIDCPUInfo
} }
public boolean hasMMX() public boolean hasMMX()
{ {
return (CPUID.getEDXCPUFlags() & 0x800000) >0; //EDX Bit 23 return (CPUID.getEDXCPUFlags() & 0x800000) != 0; //EDX Bit 23
} }
public boolean hasSSE(){ public boolean hasSSE(){
return (CPUID.getEDXCPUFlags() & 0x2000000) >0; //EDX Bit 25 return (CPUID.getEDXCPUFlags() & 0x2000000) != 0; //EDX Bit 25
} }
public boolean hasSSE2() public boolean hasSSE2()
{ {
return (CPUID.getEDXCPUFlags() & 0x4000000) >0; //EDX Bit 26 return (CPUID.getEDXCPUFlags() & 0x4000000) != 0; //EDX Bit 26
} }
public boolean hasSSE3() public boolean hasSSE3()
{ {
return (CPUID.getEDXCPUFlags() & 0x1) >0; //ECX Bit 0 return (CPUID.getEDXCPUFlags() & 0x1) != 0; //ECX Bit 0
} }
public boolean hasSSE41() public boolean hasSSE41()
{ {
return (CPUID.getEDXCPUFlags() & 0x80000) >0; //ECX Bit 19 return (CPUID.getEDXCPUFlags() & 0x80000) != 0; //ECX Bit 19
} }
public boolean hasSSE42() public boolean hasSSE42()
{ {
return (CPUID.getEDXCPUFlags() & 0x100000) >0; //ECX Bit 20 return (CPUID.getEDXCPUFlags() & 0x100000) != 0; //ECX Bit 20
} }
public boolean hasSSE4A() public boolean hasSSE4A()
{ {
return (CPUID.getExtendedECXCPUFlags() & 0x40) >0; //Extended ECX Bit 6 return (CPUID.getExtendedECXCPUFlags() & 0x40) != 0; //Extended ECX Bit 6
} }
public abstract boolean hasX64(); public abstract boolean hasX64();

View File

@ -1140,6 +1140,46 @@ public class DataHelper {
return c; return c;
} }
/**
* This is different than InputStream.skip(), in that it
* does repeated reads until the full amount is skipped.
* To fix findbugs issues with skip().
*
* Guaranteed to skip exactly n bytes or throw an IOE.
*
* http://stackoverflow.com/questions/14057720/robust-skipping-of-data-in-a-java-io-inputstream-and-its-subtypes
* http://stackoverflow.com/questions/11511093/java-inputstream-skip-return-value-near-end-of-file
*
* @since 0.9.9
*/
public static void skip(InputStream in, long n) throws IOException {
if (n < 0)
throw new IllegalArgumentException();
if (n == 0)
return;
long read = 0;
long nm1 = n - 1;
if (nm1 > 0) {
// skip all but the last byte
do {
long c = in.skip(nm1 - read);
if (c < 0)
throw new EOFException("EOF while skipping " + n + ", read only " + read);
if (c == 0) {
// see second SO link above
if (in.read() == -1)
throw new EOFException("EOF while skipping " + n + ", read only " + read);
read++;
} else {
read += c;
}
} while (read < nm1);
}
// read the last byte to check for EOF
if (in.read() == -1)
throw new EOFException("EOF while skipping " + n + ", read only " + read);
}
/** /**
* This is different than InputStream.read(target), in that it * This is different than InputStream.read(target), in that it
* does repeated reads until the full data is received. * does repeated reads until the full data is received.

View File

@ -53,14 +53,14 @@ abstract class SipHashInline {
// processing 8 bytes blocks in data // processing 8 bytes blocks in data
while (i < last) { while (i < last) {
// pack a block to long, as LE 8 bytes // pack a block to long, as LE 8 bytes
m = (long) data[i++] | m = ((((long) data[i++]) & 0xff) ) |
(long) data[i++] << 8 | ((((long) data[i++]) & 0xff) << 8) |
(long) data[i++] << 16 | ((((long) data[i++]) & 0xff) << 16) |
(long) data[i++] << 24 | ((((long) data[i++]) & 0xff) << 24) |
(long) data[i++] << 32 | ((((long) data[i++]) & 0xff) << 32) |
(long) data[i++] << 40 | ((((long) data[i++]) & 0xff) << 40) |
(long) data[i++] << 48 | ((((long) data[i++]) & 0xff) << 48) |
(long) data[i++] << 56 ; ((((long) data[i++]) & 0xff) << 56);
// MSGROUND { // MSGROUND {
v3 ^= m; v3 ^= m;
@ -132,7 +132,7 @@ abstract class SipHashInline {
// packing the last block to long, as LE 0-7 bytes + the length in the top byte // packing the last block to long, as LE 0-7 bytes + the length in the top byte
m = 0; m = 0;
for (i = off + len - 1; i >= last; --i) { for (i = off + len - 1; i >= last; --i) {
m <<= 8; m |= (long) data[i]; m <<= 8; m |= (long) (data[i] & 0xff);
} }
m |= (long) len << 56; m |= (long) len << 56;
// MSGROUND { // MSGROUND {

View File

@ -69,12 +69,12 @@ public abstract class ZipFileComment {
try { try {
in = new FileInputStream(file); in = new FileInputStream(file);
if (skip > 0) if (skip > 0)
in.skip(skip); DataHelper.skip(in, skip);
byte[] hdr = new byte[HEADER_LEN]; byte[] hdr = new byte[HEADER_LEN];
DataHelper.read(in, hdr); DataHelper.read(in, hdr);
if (!DataHelper.eq(hdr, magicStart)) if (!DataHelper.eq(hdr, magicStart))
throw new ZipException("Not a zip file: " + file); throw new ZipException("Not a zip file: " + file);
in.skip(fileLen - (skip + HEADER_LEN + buffer.length)); DataHelper.skip(in, fileLen - (skip + HEADER_LEN + buffer.length));
DataHelper.read(in, buffer); DataHelper.read(in, buffer);
return getComment(buffer); return getComment(buffer);
} finally { } finally {

View File

@ -390,6 +390,7 @@ public class BSkipSpan extends SkipSpan {
this.prev = null; this.prev = null;
BSkipSpan bss = this; BSkipSpan bss = this;
// findbugs ok (set in load() above)
int np = nextPage; int np = nextPage;
while(np != 0) { while(np != 0) {
BSkipSpan temp = bsl.spanHash.get(Integer.valueOf(np)); BSkipSpan temp = bsl.spanHash.get(Integer.valueOf(np));

View File

@ -525,10 +525,14 @@ public class Blocklist {
byte[] pib = pa.getIP(); byte[] pib = pa.getIP();
if (pib == null) continue; if (pib == null) continue;
// O(n**2) // O(n**2)
boolean dup = false;
for (int i = 0; i < rv.size(); i++) { for (int i = 0; i < rv.size(); i++) {
// findbugs triggered on this, looks like unfinished work if (DataHelper.eq(rv.get(i), pib)) {
//if (DataHelper.eq(rv.get(i), pib)) continue; dup = true;
break;
} }
}
if (!dup)
rv.add(pib); rv.add(pib);
} }
return rv; return rv;

View File

@ -83,7 +83,7 @@ class GeoIPv6 {
if (!DataHelper.eq(magic, DataHelper.getASCII(MAGIC))) if (!DataHelper.eq(magic, DataHelper.getASCII(MAGIC)))
throw new IOException("Not a IPv6 geoip data file"); throw new IOException("Not a IPv6 geoip data file");
// skip timestamp and comments // skip timestamp and comments
in.skip(HEADER_LEN - MAGIC.length()); DataHelper.skip(in, HEADER_LEN - MAGIC.length());
byte[] buf = new byte[18]; byte[] buf = new byte[18];
while (DataHelper.read(in, buf) == 18 && idx < search.length) { while (DataHelper.read(in, buf) == 18 && idx < search.length) {
long ip1 = readLong(buf, 0); long ip1 = readLong(buf, 0);

View File

@ -415,7 +415,11 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
if(getIP == null || !getIP.postControlAction()) if(getIP == null || !getIP.postControlAction())
return -1; return -1;
try {
return Integer.parseInt(getIP.getOutputArgumentList().getArgument("NewUpstreamMaxBitRate").getValue()); return Integer.parseInt(getIP.getOutputArgumentList().getArgument("NewUpstreamMaxBitRate").getValue());
} catch (NumberFormatException nfe) {
return -1;
}
} }
/** /**
@ -429,7 +433,11 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
if(getIP == null || !getIP.postControlAction()) if(getIP == null || !getIP.postControlAction())
return -1; return -1;
try {
return Integer.parseInt(getIP.getOutputArgumentList().getArgument("NewDownstreamMaxBitRate").getValue()); return Integer.parseInt(getIP.getOutputArgumentList().getArgument("NewDownstreamMaxBitRate").getValue());
} catch (NumberFormatException nfe) {
return -1;
}
} }
/** debug only */ /** debug only */