Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:24
erlang
0212-erts-Add-assertions-that-flatmaps-have-cor...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0212-erts-Add-assertions-that-flatmaps-have-correct-size.patch of Package erlang
From 89eef52aab27c3eb8901032126f95925beada532 Mon Sep 17 00:00:00 2001 From: Lukas Larsson <lukas@erlang.org> Date: Thu, 31 Mar 2022 09:54:34 +0200 Subject: [PATCH 1/2] erts: Add assertions that flatmaps have correct size --- erts/emulator/beam/copy.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erts/emulator/beam/copy.c b/erts/emulator/beam/copy.c index 51cbb7644d..b1e8b7edbd 100644 --- a/erts/emulator/beam/copy.c +++ b/erts/emulator/beam/copy.c @@ -163,6 +163,7 @@ Uint size_object_x(Eterm obj, erts_literal_area_t *litopt) mp = (flatmap_t*)flatmap_val(obj); ptr = (Eterm *)mp; n = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); sum += n + 2; ptr += 2; /* hdr + size words */ while (n--) { @@ -430,6 +431,7 @@ Uint size_shared(Eterm obj) case MAP_HEADER_TAG_FLATMAP_HEAD : { flatmap_t *mp = (flatmap_t*)flatmap_val(obj); Uint n = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); ptr = (Eterm *)mp; sum += n + 2; ptr += 2; /* hdr + size words */ @@ -566,6 +568,7 @@ cleanup: case MAP_HEADER_TAG_FLATMAP_HEAD : { flatmap_t *mp = (flatmap_t *) ptr; Uint n = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); ptr += 2; /* hdr + size words */ while (n--) { obj = *ptr++; @@ -916,6 +919,7 @@ Eterm copy_struct_x(Eterm obj, Uint sz, Eterm** hpp, ErlOffHeap* off_heap, switch (MAP_HEADER_TYPE(hdr)) { case MAP_HEADER_TAG_FLATMAP_HEAD : i = flatmap_get_size(objp) + 3; + ASSERT(flatmap_get_size(objp) <= MAP_SMALL_MAP_LIMIT); *argp = make_flatmap(htop); while (i--) { *htop++ = *objp++; @@ -1318,6 +1322,7 @@ Uint copy_shared_calculate(Eterm obj, erts_shcopy_t *info) case MAP_HEADER_TAG_FLATMAP_HEAD : { flatmap_t *mp = (flatmap_t *) ptr; Uint n = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); sum += n + 2; ptr += 2; /* hdr + size words */ while (n--) { @@ -1629,6 +1634,7 @@ Uint copy_shared_perform_x(Eterm obj, Uint size, erts_shcopy_t *info, case MAP_HEADER_TAG_FLATMAP_HEAD : { flatmap_t *mp = (flatmap_t *) ptr; Uint n = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); *hp++ = *++ptr; /* keys */ while (n--) { obj = *++ptr; @@ -1832,6 +1838,7 @@ Uint copy_shared_perform_x(Eterm obj, Uint size, erts_shcopy_t *info, case MAP_HEADER_TAG_FLATMAP_HEAD : { flatmap_t *mp = (flatmap_t *) hscan; remaining = flatmap_get_size(mp) + 1; + ASSERT(flatmap_get_size(mp) <= MAP_SMALL_MAP_LIMIT); hscan += 2; break; } -- 2.34.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