From 9ba3c26a8a6550fc634da077c1c0b2202ed407b6 Mon Sep 17 00:00:00 2001 From: s-hadinger <49731213+s-hadinger@users.noreply.github.com> Date: Thu, 12 Jan 2023 22:51:43 +0100 Subject: [PATCH] Berry fix crash when generating bytecode of empty class (#17688) --- lib/libesp32/berry/src/be_bytecode.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/libesp32/berry/src/be_bytecode.c b/lib/libesp32/berry/src/be_bytecode.c index a87b28fb8..14a5950fc 100644 --- a/lib/libesp32/berry/src/be_bytecode.c +++ b/lib/libesp32/berry/src/be_bytecode.c @@ -160,17 +160,19 @@ static bstring** save_members(bvm *vm, void *fp, bclass *c, int nvar) static void save_class(bvm *vm, void *fp, bclass *c) { bstring **vars; - int i, count = be_map_count(c->members); + int i, count = c->members ? be_map_count(c->members) : 0; int nvar = c->nvar - be_class_closure_count(c); save_string(fp, c->name); save_long(fp, nvar); /* member variables count */ save_long(fp, count - nvar); /* method count */ - vars = save_members(vm, fp, c, nvar); - if (vars != NULL) { - for (i = 0; i < nvar; ++i) { - save_string(fp, vars[i]); + if (count > 0) { + vars = save_members(vm, fp, c, nvar); + if (vars != NULL) { + for (i = 0; i < nvar; ++i) { + save_string(fp, vars[i]); + } + be_free(vm, vars, sizeof(bstring *) * nvar); } - be_free(vm, vars, sizeof(bstring *) * nvar); } }