Skip to content

Segfault in plan graph construction with complex multi-MATCH queries #587

Description

@rjb32

AFL++ fuzzing found a segmentation fault during plan graph construction when processing a complex query with multiple MATCH clauses and many patterns.

Reproducer (on simpledb):

MATCH (nl)-->(dp)-->(q), (l)-->(mYIELDp)-->(z), (l)-->(m)MATCH (n)-->()-->(a), (p)-->(z), (l)-->(Dp)-->(z), (l)-->(m)MATCH (q) WHERE n= p.age/10 AND m.age < p.age+2/p.age/10 AND m.age <0 AND m.age < p.age+2/8 RETURN n,m,z,p

Signal: SIGSEGV

Stacktrace:

PlanGraphNode::connectOut(PlanGraphNode*)                     (PlanGraphNode.h:138)
  → ReadStmtGenerator::insertDataFlowNode(VarNode*, PlanGraphNode*, Predicate*)
                                                              (ReadStmtGenerator.cpp:909)
  → ReadStmtGenerator::placePredicates()                     (ReadStmtGenerator.cpp:657)
  → PlanGraphGenerator::generateSinglePartQuery(SinglePartQuery const*)
                                                              (PlanGraphGenerator.cpp:244)

Root cause: In ReadStmtGenerator::insertDataFlowNode (line 909), _topology->getBranchTip(dependency) returns null for this query structure. The code then calls depBranchTip->connectOut(join) without null-checking, causing a segfault.

The plan graph topology cannot resolve branch tips for this particular multi-MATCH structure with many shared variables across clauses.

Found by AFL++ fuzz on ed42d45f

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions