Skip to content

--format=csv in codeql database interpret-results can produce a malformed .csv #21729

@k4lizen

Description

@k4lizen

Description of the issue

See #21673 and #21670 (comment). A query like this:

class MyStuct extends Struct {
  MyFlow::PathNode source;
  MyFlow::PathNode sink;
  MyStuct() {
      MyFlow::flowPath(source, sink) and
      some_predicate(this, sink) and
  }
  MyFlow::PathNode getSink() { result = sink }
  MyFlow::PathNode getSource() { result = source }
}
from MyStuct s, MyFlow::PathNode source, MyFlow::PathNode sink
where
  source = s.getSource() and sink = s.getSink() 
select sink.getNode(), source, sink, "aaa"

will have lots of rows with unrelated sinks and sources, and interpret-results combusts in figuring this out.

codeql database interpret-results  ./source/source-db/ ./queries/my-query.ql --format=csv --output=./a.csv

Will give me a .csv that looks like this:

,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa
aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa
aaa
aaa
aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"
,,"warning","aaa","/sources/my-source/myfile.c","1","2","3","4"

(with different filenames and locations, I just stubbed them out, but you can see the formatting is bad)

Supposedly the sarif format at least somewhat works, since the vscode extension uses that and can provide a somewhat sensible output, but there are two results it shows which it should not show (48 results are shown, but only 46 are valid).

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionFurther information is requested

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions