Comments (2)
This one is going to be harder to fix than expected. The detector seems to be deeply broken as it's failing on lot of scenarios were it shouldn't.
The database should recognize that closing a Statement
closes the ResultSet
, 'though the opposite is not currently true:
database.addEntry(new MatchMethodEntry(new SubtypeTypeMatcher(BCELUtil.getObjectTypeInstance("java.sql.Statement")),
new ExactStringMatcher("close"), new ExactStringMatcher("()V"), false, ObligationPolicyDatabaseActionType.DEL,
ObligationPolicyDatabaseEntryType.STRONG, statement, resultSet));
database.addEntry(new MatchMethodEntry(new SubtypeTypeMatcher(BCELUtil.getObjectTypeInstance("java.sql.ResultSet")),
new ExactStringMatcher("close"), new ExactStringMatcher("()V"), false, ObligationPolicyDatabaseActionType.DEL,
ObligationPolicyDatabaseEntryType.STRONG, resultSet));
However, this is failing even without the use-with-resources construct:
public class Issue79 {
private static final String QUERY = "";
public void f(Connection cnx) throws SQLException {
PreparedStatement st = null;
ResultSet rs = null;
try {
st = cnx.prepareStatement(QUERY);
rs = st.executeQuery();
while (rs.next()) {
System.out.println(rs.getString("ID"));
}
} finally {
/*
* The statement closes the result set, and there is no scenario where st may be null
* but not the resultset, however an unsatisfied obligation is reported on the resultset
*/
if (st != null) {
st.close();
}
}
}
}
Also of note, the current implementation can't track which result set is associated with which statement, so when using more than one it can produce lots of false positives and false negatives...
We should probably drop this one for release 4.0.0 and think of a deep refactor for this detector.
from spotbugs.
The issue can be reproduced and is confirmed. I'll be working on a fix.
from spotbugs.
Related Issues (20)
- False positive SING_SINGLETON_GETTER_NOT_SYNCHRONIZED with eager instances HOT 2
- False positive SING_SINGLETON_IMPLEMENTS_SERIALIZABLE with readResolve() present HOT 3
- False positive SING_SINGLETON_HAS_NONPRIVATE_CONSTRUCTOR with reused instances HOT 7
- SE_BAD_FIELD with records and spotbugs-4.8.4 HOT 4
- False Positive: IL_INFINITE_LOOP HOT 6
- Prefix matching behavior of SuppressFBWarnings makes it impossible to suppress just one warning HOT 2
- DataflowAnalysisException in 4.7.3 and 4.8.3 HOT 5
- Preview mode for new/enhanced detectors HOT 2
- How to get line number of method in Interface HOT 1
- Spotbugs 4.8.4 release notes missing in GitHub HOT 5
- MC_OVERRIDABLE_METHOD_CALL_IN_READ_OBJECT false positive in 4.8.4 HOT 14
- Test classes for issue 574 are in the wrong package HOT 1
- Failing while building spotbugs version 4.2.3 using ./gradlew build HOT 5
- Change the release process to automate the changelog HOT 1
- False positive SING_SINGLETON_IMPLEMENTS_SERIALIZABLE when class is not a singleton HOT 3
- Still getting NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE with Objects.requireNonNull
- Version 4.8.4 false positive SING_SINGLETON_GETTER_NOT_SYNCHRONIZED HOT 6
- False positive BC_IMPOSSIBLE_INSTANCEOF HOT 4
- Stylesheet not working in 4.8.4 HOT 6
- Signature of eclipse-plugin expired HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spotbugs.