Index: src/main/java/org/sonar/plugins/cxx/rats/CxxRatsSensor.java =================================================================== --- src/main/java/org/sonar/plugins/cxx/rats/CxxRatsSensor.java (revision 5416) +++ src/main/java/org/sonar/plugins/cxx/rats/CxxRatsSensor.java (working copy) @@ -30,6 +30,7 @@ import org.sonar.api.resources.Project; import org.sonar.api.rules.RuleFinder; import org.sonar.plugins.cxx.utils.CxxSensor; +import org.sonar.plugins.cxx.utils.CxxUtils; /** * {@inheritDoc} @@ -70,22 +71,29 @@ Element root = builder.build(report).getRootElement(); List vulnerabilities = root.getChildren("vulnerability"); + int count = 0; for (Element vulnerability : vulnerabilities) { - String type = vulnerability.getChild("type").getTextTrim(); - String message = vulnerability.getChild("message").getTextTrim(); - - List files = vulnerability.getChildren("file"); - - for (Element file : files) { - String fileName = file.getChild("name").getTextTrim(); - - List lines = file.getChildren("line"); - for (Element lineElem : lines) { - int line = Integer.parseInt(lineElem.getTextTrim()); - saveViolation(project, context, CxxRatsRuleRepository.KEY, - fileName, line, type, message); + Element typeChild = vulnerability.getChild("type"); + if(typeChild != null){ + String type = typeChild.getTextTrim(); + String message = vulnerability.getChild("message").getTextTrim(); + + List files = vulnerability.getChildren("file"); + + for (Element file : files) { + String fileName = file.getChild("name").getTextTrim(); + + List lines = file.getChildren("line"); + for (Element lineElem : lines) { + int line = Integer.parseInt(lineElem.getTextTrim()); + saveViolation(project, context, CxxRatsRuleRepository.KEY, + fileName, line, type, message); + } } + }else{ + CxxUtils.LOG.warn("Unable to find RATS violation type, skipping entry " + count + " in file " + report.getName()); } + count++; } } } Index: src/test/resources/org/sonar/plugins/cxx/rats-reports/rats-result-TYPE_BUG.xml =================================================================== --- src/test/resources/org/sonar/plugins/cxx/rats-reports/rats-result-TYPE_BUG.xml (revision 0) +++ src/test/resources/org/sonar/plugins/cxx/rats-reports/rats-result-TYPE_BUG.xml (revision 0) @@ -0,0 +1,30 @@ + + +33 +46 +62 +334 +55 + +sources//utils/utils.cpp + + High + + + Check to be sure that argument 2 passed to this function call will not + copy more data than can be handled, resulting in a buffer overflow. + + + sources//utils/utils.cpp + 23 + + + +125 +0.009917 +12604 + +