Skip to content

Commit 14b8ead

Browse files
authored
Fix crash when loading languages w/ old ABI via wasm (tree-sitter#4210)
1 parent f0571b1 commit 14b8ead

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

lib/src/wasm_store.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,6 +1220,10 @@ const TSLanguage *ts_wasm_store_load_language(
12201220
const uint8_t *memory = wasmtime_memory_data(context, &self->memory);
12211221
memcpy(&wasm_language, &memory[language_address], sizeof(LanguageInWasmMemory));
12221222

1223+
bool has_supertypes =
1224+
wasm_language.abi_version > LANGUAGE_VERSION_WITH_RESERVED_WORDS &&
1225+
wasm_language.supertype_count > 0;
1226+
12231227
int32_t addresses[] = {
12241228
wasm_language.parse_table,
12251229
wasm_language.small_parse_table,
@@ -1239,9 +1243,9 @@ const TSLanguage *ts_wasm_store_load_language(
12391243
wasm_language.primary_state_ids,
12401244
wasm_language.name,
12411245
wasm_language.reserved_words,
1242-
wasm_language.supertype_symbols,
1243-
wasm_language.supertype_map_entries,
1244-
wasm_language.supertype_map_slices,
1246+
has_supertypes ? wasm_language.supertype_symbols : 0,
1247+
has_supertypes ? wasm_language.supertype_map_entries : 0,
1248+
has_supertypes ? wasm_language.supertype_map_slices : 0,
12451249
wasm_language.external_token_count > 0 ? wasm_language.external_scanner.states : 0,
12461250
wasm_language.external_token_count > 0 ? wasm_language.external_scanner.symbol_map : 0,
12471251
wasm_language.external_token_count > 0 ? wasm_language.external_scanner.create : 0,
@@ -1331,7 +1335,7 @@ const TSLanguage *ts_wasm_store_load_language(
13311335
);
13321336
}
13331337

1334-
if (language->supertype_count > 0) {
1338+
if (has_supertypes) {
13351339
language->supertype_symbols = copy(
13361340
&memory[wasm_language.supertype_symbols],
13371341
wasm_language.supertype_count * sizeof(TSSymbol)

0 commit comments

Comments
 (0)