Skip to content

Commit d7e54a5

Browse files
committed
csparser: parse CWE numbers out of annotations
1 parent 758efde commit d7e54a5

File tree

4 files changed

+70
-47
lines changed

4 files changed

+70
-47
lines changed

csparser.cc

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -357,13 +357,35 @@ void KeyEventDigger::initVerbosity(Defect *def) {
357357
}
358358
}
359359

360+
class AnnotHandler {
361+
public:
362+
AnnotHandler():
363+
reCweAnnot_("^ *\\(CWE-([0-9]+)\\)$")
364+
{
365+
}
366+
367+
void handleDef(Defect *);
368+
369+
private:
370+
boost::regex reCweAnnot_;
371+
};
372+
373+
void AnnotHandler::handleDef(Defect *pDef) {
374+
boost::smatch sm;
375+
if (boost::regex_match(pDef->annotation, sm, reCweAnnot_)) {
376+
pDef->cwe = parse_int(sm[/* cwe */ 1]);
377+
pDef->annotation.clear();
378+
}
379+
}
380+
360381
struct CovParser::Private {
361382
ErrFileLexer lexer;
362383
std::string fileName;
363384
const bool silent;
364385
bool hasError;
365386
EToken code;
366387
KeyEventDigger keDigger;
388+
AnnotHandler annotHdl;
367389

368390
Private(std::istream &input_, std::string fileName_, bool silent_):
369391
lexer(input_),
@@ -539,15 +561,16 @@ bool CovParser::Private::parseNext(Defect *def) {
539561
}
540562

541563
done:
542-
if (this->keDigger.guessKeyEvent(def)) {
543-
this->keDigger.initVerbosity(def);
544-
545-
// all OK
546-
return true;
564+
if (!this->keDigger.guessKeyEvent(def)) {
565+
this->parseError("failed to guess key event");
566+
return false;
547567
}
548568

549-
this->parseError("failed to guess key event");
550-
return false;
569+
this->keDigger.initVerbosity(def);
570+
this->annotHdl.handleDef(def);
571+
572+
// all OK
573+
return true;
551574
}
552575

553576
bool CovParser::getNext(Defect *def) {

tests/csgrep/10-err-file-comments-stdout.txt

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"defects": [
33
{
44
"checker": "UNINIT",
5-
"annotation": " (CWE-457)",
5+
"cwe": 457,
66
"key_event_idx": 4,
77
"events": [
88
{
@@ -52,7 +52,7 @@
5252
},
5353
{
5454
"checker": "UNINIT",
55-
"annotation": " (CWE-457)",
55+
"cwe": 457,
5656
"key_event_idx": 2,
5757
"events": [
5858
{
@@ -80,7 +80,7 @@
8080
},
8181
{
8282
"checker": "UNINIT",
83-
"annotation": " (CWE-457)",
83+
"cwe": 457,
8484
"key_event_idx": 2,
8585
"events": [
8686
{
@@ -108,7 +108,7 @@
108108
},
109109
{
110110
"checker": "UNINIT",
111-
"annotation": " (CWE-457)",
111+
"cwe": 457,
112112
"key_event_idx": 2,
113113
"events": [
114114
{
@@ -144,7 +144,7 @@
144144
},
145145
{
146146
"checker": "UNINIT",
147-
"annotation": " (CWE-457)",
147+
"cwe": 457,
148148
"key_event_idx": 2,
149149
"events": [
150150
{
@@ -180,7 +180,7 @@
180180
},
181181
{
182182
"checker": "UNINIT",
183-
"annotation": " (CWE-457)",
183+
"cwe": 457,
184184
"key_event_idx": 6,
185185
"events": [
186186
{
@@ -245,7 +245,7 @@
245245
},
246246
{
247247
"checker": "UNINIT",
248-
"annotation": " (CWE-457)",
248+
"cwe": 457,
249249
"key_event_idx": 2,
250250
"events": [
251251
{
@@ -273,7 +273,7 @@
273273
},
274274
{
275275
"checker": "UNINIT",
276-
"annotation": " (CWE-457)",
276+
"cwe": 457,
277277
"key_event_idx": 2,
278278
"events": [
279279
{
@@ -301,7 +301,7 @@
301301
},
302302
{
303303
"checker": "UNINIT",
304-
"annotation": " (CWE-457)",
304+
"cwe": 457,
305305
"key_event_idx": 2,
306306
"events": [
307307
{
@@ -329,7 +329,7 @@
329329
},
330330
{
331331
"checker": "UNINIT",
332-
"annotation": " (CWE-457)",
332+
"cwe": 457,
333333
"key_event_idx": 2,
334334
"events": [
335335
{
@@ -357,7 +357,7 @@
357357
},
358358
{
359359
"checker": "UNINIT",
360-
"annotation": " (CWE-457)",
360+
"cwe": 457,
361361
"key_event_idx": 2,
362362
"events": [
363363
{
@@ -385,7 +385,7 @@
385385
},
386386
{
387387
"checker": "UNINIT",
388-
"annotation": " (CWE-457)",
388+
"cwe": 457,
389389
"key_event_idx": 4,
390390
"events": [
391391
{
@@ -436,7 +436,7 @@
436436
},
437437
{
438438
"checker": "UNINIT",
439-
"annotation": " (CWE-457)",
439+
"cwe": 457,
440440
"key_event_idx": 2,
441441
"events": [
442442
{
@@ -464,7 +464,7 @@
464464
},
465465
{
466466
"checker": "UNINIT",
467-
"annotation": " (CWE-457)",
467+
"cwe": 457,
468468
"key_event_idx": 2,
469469
"events": [
470470
{
@@ -492,7 +492,7 @@
492492
},
493493
{
494494
"checker": "UNINIT",
495-
"annotation": " (CWE-457)",
495+
"cwe": 457,
496496
"key_event_idx": 2,
497497
"events": [
498498
{
@@ -520,7 +520,7 @@
520520
},
521521
{
522522
"checker": "UNINIT",
523-
"annotation": " (CWE-457)",
523+
"cwe": 457,
524524
"key_event_idx": 2,
525525
"events": [
526526
{
@@ -548,7 +548,7 @@
548548
},
549549
{
550550
"checker": "UNINIT",
551-
"annotation": " (CWE-457)",
551+
"cwe": 457,
552552
"key_event_idx": 2,
553553
"events": [
554554
{
@@ -576,7 +576,7 @@
576576
},
577577
{
578578
"checker": "UNINIT",
579-
"annotation": " (CWE-457)",
579+
"cwe": 457,
580580
"key_event_idx": 2,
581581
"events": [
582582
{
@@ -604,7 +604,7 @@
604604
},
605605
{
606606
"checker": "UNINIT",
607-
"annotation": " (CWE-457)",
607+
"cwe": 457,
608608
"key_event_idx": 2,
609609
"events": [
610610
{
@@ -632,7 +632,7 @@
632632
},
633633
{
634634
"checker": "UNINIT",
635-
"annotation": " (CWE-457)",
635+
"cwe": 457,
636636
"key_event_idx": 2,
637637
"events": [
638638
{
@@ -660,7 +660,7 @@
660660
},
661661
{
662662
"checker": "UNINIT",
663-
"annotation": " (CWE-457)",
663+
"cwe": 457,
664664
"key_event_idx": 2,
665665
"events": [
666666
{
@@ -688,7 +688,7 @@
688688
},
689689
{
690690
"checker": "UNINIT",
691-
"annotation": " (CWE-457)",
691+
"cwe": 457,
692692
"key_event_idx": 4,
693693
"events": [
694694
{
@@ -738,7 +738,7 @@
738738
},
739739
{
740740
"checker": "UNINIT",
741-
"annotation": " (CWE-457)",
741+
"cwe": 457,
742742
"key_event_idx": 3,
743743
"events": [
744744
{
@@ -773,7 +773,7 @@
773773
},
774774
{
775775
"checker": "UNINIT",
776-
"annotation": " (CWE-457)",
776+
"cwe": 457,
777777
"key_event_idx": 2,
778778
"events": [
779779
{
@@ -809,7 +809,7 @@
809809
},
810810
{
811811
"checker": "UNINIT",
812-
"annotation": " (CWE-457)",
812+
"cwe": 457,
813813
"key_event_idx": 4,
814814
"events": [
815815
{
@@ -851,7 +851,7 @@
851851
},
852852
{
853853
"checker": "UNINIT",
854-
"annotation": " (CWE-457)",
854+
"cwe": 457,
855855
"key_event_idx": 3,
856856
"events": [
857857
{
@@ -886,7 +886,7 @@
886886
},
887887
{
888888
"checker": "UNINIT",
889-
"annotation": " (CWE-457)",
889+
"cwe": 457,
890890
"key_event_idx": 2,
891891
"events": [
892892
{
@@ -922,7 +922,7 @@
922922
},
923923
{
924924
"checker": "UNINIT",
925-
"annotation": " (CWE-457)",
925+
"cwe": 457,
926926
"key_event_idx": 2,
927927
"events": [
928928
{
@@ -958,7 +958,7 @@
958958
},
959959
{
960960
"checker": "UNINIT",
961-
"annotation": " (CWE-457)",
961+
"cwe": 457,
962962
"key_event_idx": 2,
963963
"events": [
964964
{
@@ -986,7 +986,7 @@
986986
},
987987
{
988988
"checker": "UNINIT",
989-
"annotation": " (CWE-457)",
989+
"cwe": 457,
990990
"key_event_idx": 3,
991991
"events": [
992992
{
@@ -1029,7 +1029,7 @@
10291029
},
10301030
{
10311031
"checker": "UNINIT",
1032-
"annotation": " (CWE-457)",
1032+
"cwe": 457,
10331033
"key_event_idx": 2,
10341034
"events": [
10351035
{
@@ -1057,7 +1057,7 @@
10571057
},
10581058
{
10591059
"checker": "UNINIT",
1060-
"annotation": " (CWE-457)",
1060+
"cwe": 457,
10611061
"key_event_idx": 3,
10621062
"events": [
10631063
{
@@ -1100,7 +1100,7 @@
11001100
},
11011101
{
11021102
"checker": "UNINIT",
1103-
"annotation": " (CWE-457)",
1103+
"cwe": 457,
11041104
"key_event_idx": 2,
11051105
"events": [
11061106
{
@@ -1136,7 +1136,7 @@
11361136
},
11371137
{
11381138
"checker": "UNINIT",
1139-
"annotation": " (CWE-457)",
1139+
"cwe": 457,
11401140
"key_event_idx": 4,
11411141
"events": [
11421142
{
@@ -1186,7 +1186,7 @@
11861186
},
11871187
{
11881188
"checker": "UNINIT",
1189-
"annotation": " (CWE-457)",
1189+
"cwe": 457,
11901190
"key_event_idx": 2,
11911191
"events": [
11921192
{

tests/csgrep/33-cov-format-errors-stdout.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"defects": [
33
{
44
"checker": "CHECKED_RETURN",
5-
"annotation": " (CWE-252)",
5+
"cwe": 252,
66
"key_event_idx": 0,
77
"events": [
88
{

0 commit comments

Comments
 (0)