Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:23
erlang
0635-erts-Fix-PAM-bug-where-hashmap-exprs-pushe...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0635-erts-Fix-PAM-bug-where-hashmap-exprs-pushed-to-much.patch of Package erlang
From 413e50a2b1450df4ecdd1e8fa7790ec4dc1668c2 Mon Sep 17 00:00:00 2001 From: Lukas Larsson <lukas@erlang.org> Date: Thu, 12 Aug 2021 16:37:00 +0200 Subject: [PATCH 5/6] erts: Fix PAM bug where hashmap exprs pushed to much When a hashmap was used in guard or body it pushed values to the program when trying to figure out if a hashmap was constant or if it contained expressions. These values were not removed if any expression was found and thus the program broke. --- erts/emulator/beam/erl_db_util.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c index 7744c98612..83ebdeda68 100644 --- a/erts/emulator/beam/erl_db_util.c +++ b/erts/emulator/beam/erl_db_util.c @@ -3963,6 +3963,7 @@ dmc_map(DMCContext *context, DMCHeap *heap, DMC_STACK_TYPE(UWord) *text, DECLARE_WSTACK(wstack); Eterm *kv; int c; + int textpos = DMC_STACK_NUM(*text); ASSERT(is_hashmap(t)); @@ -3980,11 +3981,15 @@ dmc_map(DMCContext *context, DMCHeap *heap, DMC_STACK_TYPE(UWord) *text, } if (constant_values) { + ASSERT(DMC_STACK_NUM(*text) == textpos); *constant = 1; DESTROY_WSTACK(wstack); return retOk; } + /* reset the program to the original position and re-emit everything */ + DMC_STACK_NUM(*text) = textpos; + *constant = 0; hashmap_iterator_init(&wstack, t, 1); -- 2.31.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor