Don't use zero maxlen for snprintf in ts_subtree__write_to_string

It seems that (some implementations of?) `snprintf` returns -1 and sets `errno` to `EINVAL` if a `maxlen` of zero is passed. This causes the count to underflow and `ts_subtree__write_to_string` returns a gigantic size which the succeeding malloc will refuse to allocate.
This commit is contained in:
furunkel 2021-11-12 20:52:15 +01:00 committed by GitHub
parent 67de9435b1
commit f78ad7162f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -874,7 +874,7 @@ static size_t ts_subtree__write_to_string(
if (!self.ptr) return snprintf(string, limit, "(NULL)");
char *cursor = string;
char **writer = (limit > 0) ? &cursor : &string;
char **writer = (limit > 1) ? &cursor : &string;
bool is_root = field_name == ROOT_FIELD;
bool is_visible =
include_all ||
@ -973,7 +973,7 @@ char *ts_subtree_string(
) {
char scratch_string[1];
size_t size = ts_subtree__write_to_string(
self, scratch_string, 0,
self, scratch_string, 1,
language, include_all,
0, false, ROOT_FIELD
) + 1;