Fix start_tag leak in the vendored SQL scanner deserialize

tree_sitter_sql_external_scanner_deserialize set state->start_tag = NULL and re-malloc'd it without freeing the previous allocation. tree-sitter calls deserialize repeatedly during a parse, leaking the prior start_tag each time (LeakSanitizer, Linux x64). Free it first — safe since create() NULL-inits it and destroy() frees+NULLs it.
This commit is contained in:
Martin Vogel
2026-06-06 13:33:15 +02:00
parent 0baa92c43c
commit 0e61867d9a
+1
View File
@@ -179,6 +179,7 @@ unsigned tree_sitter_sql_external_scanner_serialize(void *payload, char *buffer)
void tree_sitter_sql_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) { void tree_sitter_sql_external_scanner_deserialize(void *payload, const char *buffer, unsigned length) {
LexerState *state = (LexerState *)payload; LexerState *state = (LexerState *)payload;
free(state->start_tag); /* deserialize is called repeatedly; free the prior tag first */
state->start_tag = NULL; state->start_tag = NULL;
// A length of 1 can't exists. // A length of 1 can't exists.
if (length > 1) { if (length > 1) {