Skip to content

Commit ab21539

Browse files
committed
csparser: black-list 'remediation' for a key event
But do not treat it as a trace event either.
1 parent ea95cc6 commit ab21539

8 files changed

+63
-23
lines changed

Diff for: csparser.cc

+28-23
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ struct KeyEventDigger::Private {
214214
typedef std::set<std::string> TSet;
215215
typedef std::map<std::string, TSet> TMap;
216216
TMap hMap;
217-
TSet blackList;
217+
TSet blackList, traceEvts;
218218
};
219219

220220
KeyEventDigger::KeyEventDigger():
@@ -258,26 +258,29 @@ KeyEventDigger::KeyEventDigger():
258258
// do not match the lowered checker name of the following checkers
259259
d->hMap["LOCK"];
260260

261-
// events that should never be used as key events
262-
d->blackList.insert("break");
263-
d->blackList.insert("caretline");
264-
d->blackList.insert("cond_false");
265-
d->blackList.insert("cond_true");
266-
d->blackList.insert("continue");
267-
d->blackList.insert("else_branch");
268-
d->blackList.insert("end_of_path");
269-
d->blackList.insert("goto");
270-
d->blackList.insert("if_end");
271-
d->blackList.insert("if_fallthrough");
272-
d->blackList.insert("label");
273-
d->blackList.insert("loop");
274-
d->blackList.insert("loop_begin");
275-
d->blackList.insert("loop_end");
276-
d->blackList.insert("switch");
277-
d->blackList.insert("switch_case");
278-
d->blackList.insert("switch_default");
279-
d->blackList.insert("switch_end");
280-
d->blackList.insert("return");
261+
// events that should never be used as key events (excluding trace events)
262+
d->blackList.insert("remediation");
263+
264+
// trace events
265+
d->traceEvts.insert("break");
266+
d->traceEvts.insert("caretline");
267+
d->traceEvts.insert("cond_false");
268+
d->traceEvts.insert("cond_true");
269+
d->traceEvts.insert("continue");
270+
d->traceEvts.insert("else_branch");
271+
d->traceEvts.insert("end_of_path");
272+
d->traceEvts.insert("goto");
273+
d->traceEvts.insert("if_end");
274+
d->traceEvts.insert("if_fallthrough");
275+
d->traceEvts.insert("label");
276+
d->traceEvts.insert("loop");
277+
d->traceEvts.insert("loop_begin");
278+
d->traceEvts.insert("loop_end");
279+
d->traceEvts.insert("switch");
280+
d->traceEvts.insert("switch_case");
281+
d->traceEvts.insert("switch_default");
282+
d->traceEvts.insert("switch_end");
283+
d->traceEvts.insert("return");
281284
}
282285

283286
KeyEventDigger::~KeyEventDigger() {
@@ -322,7 +325,9 @@ bool KeyEventDigger::guessKeyEvent(Defect *def) {
322325
// never use comment as the key event
323326
continue;
324327

325-
if (!d->blackList.count(evt.event))
328+
const std::string &evtName = evt.event;
329+
if (!d->traceEvts.count(evtName) && !d->blackList.count(evtName))
330+
// never use trace or black-listed event as the key event
326331
break;
327332
}
328333

@@ -336,7 +341,7 @@ void KeyEventDigger::initVerbosity(Defect *def) {
336341
DefEvent &evt = evtList[idx];
337342
evt.verbosityLevel = (idx == def->keyEventIdx)
338343
? /* key event */ 0
339-
: 1 + /* trace event */ !!d->blackList.count(evt.event);
344+
: 1 + /* trace event */ !!d->traceEvts.count(evt.event);
340345
}
341346
}
342347

Diff for: tests/CMakeLists.txt

+2
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,8 @@ test_csgrep(csgrep "34-csgrep-color" )
144144
test_csgrep(csgrep "35-cov-format-errors" )
145145
test_csgrep(csgrep "36-csgrep-json" )
146146
test_csgrep(csgrep "37-csgrep-json" )
147+
test_csgrep(csgrep "38-csparser-remediation" )
148+
test_csgrep(csgrep "39-csparser-remediation" )
147149
test_csparser(csparser-5.8 00)
148150
test_csparser(csparser-5.8 01)
149151
test_csparser(csparser-5.8 02)

Diff for: tests/csgrep/38-csparser-remediation-args.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--prune-events=0

Diff for: tests/csgrep/38-csparser-remediation-stdin.txt

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Error: NO_EFFECT:
2+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
3+
bad_memset: Calling "memset" with size 0: "memset(buf, 4096, 0UL)" does nothing.
4+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
5+
remediation: Did you reverse the second and third arguments? The second argument should be the value to fill the memory with and the third argument should be the number of bytes to set.
6+
Error: memset_noop:
7+
path:/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:6:
8+
cond_true: Condition "f < 100", taking true branch.
9+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
10+
memset_noop: "memset(buf, 4096, 0UL)" does nothing because the "size" argument of memset() evaluates to zero. Did you swap its arguments?

Diff for: tests/csgrep/38-csparser-remediation-stdout.txt

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Error: NO_EFFECT:
2+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7: bad_memset: Calling "memset" with size 0: "memset(buf, 4096, 0UL)" does nothing.
3+
4+
Error: memset_noop:
5+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7: memset_noop: "memset(buf, 4096, 0UL)" does nothing because the "size" argument of memset() evaluates to zero. Did you swap its arguments?

Diff for: tests/csgrep/39-csparser-remediation-args.txt

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--prune-events=1

Diff for: tests/csgrep/39-csparser-remediation-stdin.txt

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Error: NO_EFFECT:
2+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
3+
bad_memset: Calling "memset" with size 0: "memset(buf, 4096, 0UL)" does nothing.
4+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
5+
remediation: Did you reverse the second and third arguments? The second argument should be the value to fill the memory with and the third argument should be the number of bytes to set.
6+
Error: memset_noop:
7+
path:/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:6:
8+
cond_true: Condition "f < 100", taking true branch.
9+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7:
10+
memset_noop: "memset(buf, 4096, 0UL)" does nothing because the "size" argument of memset() evaluates to zero. Did you swap its arguments?

Diff for: tests/csgrep/39-csparser-remediation-stdout.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Error: NO_EFFECT:
2+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7: bad_memset: Calling "memset" with size 0: "memset(buf, 4096, 0UL)" does nothing.
3+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7: remediation: Did you reverse the second and third arguments? The second argument should be the value to fill the memory with and the third argument should be the number of bytes to set.
4+
5+
Error: memset_noop:
6+
/home/kdudka/git/csa-sdk/memset_noop/tests/memset_noop-tests.c:7: memset_noop: "memset(buf, 4096, 0UL)" does nothing because the "size" argument of memset() evaluates to zero. Did you swap its arguments?

0 commit comments

Comments
 (0)