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
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):
Signal: SIGSEGV
Stacktrace:
Root cause: In
ReadStmtGenerator::insertDataFlowNode(line 909),_topology->getBranchTip(dependency)returns null for this query structure. The code then callsdepBranchTip->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