forked from I2P_Developers/i2p.i2p
about 20 findbugs fixes all over
This commit is contained in:
@ -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;
|
||||||
|
@ -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) {}
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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){}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -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();
|
||||||
|
@ -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.
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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));
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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 */
|
||||||
|
Reference in New Issue
Block a user