Skip to content

Commit d456656

Browse files
committed
Guard against infinite recursion on malformed supertype declarations.
1 parent 04865cb commit d456656

1 file changed

Lines changed: 3 additions & 0 deletions

File tree

  • shared/tree-sitter-extractor/src/generator

shared/tree-sitter-extractor/src/generator/ql_gen.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,9 @@ fn compute_exposed_predicates<'a, 'b>(
862862
let node = nodes.get(type_name);
863863
let class_name = node.map_or(type_name.kind.as_str(), |node| node.ql_class_name.as_str());
864864
if !cache.contains_key(class_name) {
865+
// Supertype declarations that recursively refer to themselves are a mistake, but we don't
866+
// want to cause infinite recursion, so we insert a temporary sentinel.
867+
cache.insert(class_name, Vec::new());
865868
let exposed = match node.map(|node| &node.kind) {
866869
Some(node_types::EntryKind::Table { .. }) => {
867870
field_predicates.get(type_name).cloned().unwrap_or_default()

0 commit comments

Comments
 (0)