Update of /cvsroot/fb-contrib/fb-contrib/src/com/mebigfatguy/fbcontrib/detect
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14248/src/com/mebigfatguy/fbcontrib/detect
Modified Files:
CustomBuiltXML.java
Log Message:
=" isn't a valid predictor of xml, it could be sql, or otherwise. So count them, but you need more than that to report.
Index: CustomBuiltXML.java
===================================================================
RCS file: /cvsroot/fb-contrib/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/CustomBuiltXML.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- CustomBuiltXML.java 30 Dec 2005 06:33:43 -0000 1.1
+++ CustomBuiltXML.java 31 Dec 2005 02:44:27 -0000 1.2
@@ -18,8 +18,8 @@
*/
package com.mebigfatguy.fbcontrib.detect;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -33,23 +33,24 @@
public class CustomBuiltXML extends BytecodeScanningDetector implements StatelessDetector
{
- private static final List<Pattern> xmlPatterns = new ArrayList<Pattern>();
+ private static final Map<Pattern, Boolean> xmlPatterns = new HashMap<Pattern, Boolean>();
static {
- xmlPatterns.add(Pattern.compile(".*<[a-zA-Z_](\\w)*>.*"));
- xmlPatterns.add(Pattern.compile(".*</[a-zA-Z_](\\w)*>.*"));
- xmlPatterns.add(Pattern.compile(".*<[a-zA-Z_](\\w)*/>.*"));
- xmlPatterns.add(Pattern.compile(".*<(//)?$"));
- xmlPatterns.add(Pattern.compile("^(//)?>.*"));
- xmlPatterns.add(Pattern.compile(".*=(\\s)*[\"'].*"));
- xmlPatterns.add(Pattern.compile("^[\"']>.*"));
- xmlPatterns.add(Pattern.compile(".*<!\\[CDATA\\[.*", Pattern.CASE_INSENSITIVE));
- xmlPatterns.add(Pattern.compile(".*\\]\\]>.*"));
- xmlPatterns.add(Pattern.compile(".*xmlns:.*"));
+ xmlPatterns.put(Pattern.compile(".*<[a-zA-Z_](\\w)*>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*</[a-zA-Z_](\\w)*>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*<[a-zA-Z_](\\w)*/>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*<(//)?$"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile("^(//)?>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*=(\\s)*[\"'].*"), Boolean.FALSE);
+ xmlPatterns.put(Pattern.compile("^[\"']>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*<!\\[CDATA\\[.*", Pattern.CASE_INSENSITIVE), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*\\]\\]>.*"), Boolean.TRUE);
+ xmlPatterns.put(Pattern.compile(".*xmlns:.*"), Boolean.TRUE);
}
private static final String CBX_MIN_REPORTABLE_ITEMS = "fb-contrib.cbx.minxmlitems";
private BugReporter bugReporter;
private OpcodeStack stack = new OpcodeStack();
private int xmlItemCount = 0;
+ private int xmlConfidentCount = 0;
private int lowReportingThreshold;
private int midReportingThreshold;
private int highReportingThreshold;
@@ -88,7 +89,8 @@
xmlItemCount = 0;
firstPC = -1;
super.visitCode(obj);
- if (xmlItemCount >= lowReportingThreshold) {
+ if ((xmlItemCount >= lowReportingThreshold)
+ && (xmlConfidentCount > (lowReportingThreshold >> 1))) {
bugReporter.reportBug( new BugInstance( this,
"CBX_CUSTOM_BUILT_XML",
(xmlItemCount >= highReportingThreshold) ? HIGH_PRIORITY :
@@ -140,10 +142,12 @@
if (strCon.trim().length() == 0)
return;
- for (Pattern p : xmlPatterns) {
- Matcher m = p.matcher(strCon);
+ for (Map.Entry<Pattern, Boolean> entry : xmlPatterns.entrySet()) {
+ Matcher m = entry.getKey().matcher(strCon);
if (m.matches()) {
xmlItemCount++;
+ if (entry.getValue().booleanValue())
+ xmlConfidentCount++;
if (firstPC < 0)
firstPC = getPC();
break;
|