aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/io.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2019-04-18 17:41:24 +0200
committerRickard Green <[email protected]>2019-04-18 17:41:24 +0200
commite6a69b021bc2aee6aca42bd72583a96d06f4ba9d (patch)
tree40f44a59587006bd0999a5688674d5d7627f4f8e /erts/emulator/beam/io.c
parentd0d4f2be1ebfe8293a627531b65819e85482c1d9 (diff)
parentf2671c2ef47f8c49cd5fab6e1737ed08d99ea5d2 (diff)
downloadotp-e6a69b021bc2aee6aca42bd72583a96d06f4ba9d.tar.gz
otp-e6a69b021bc2aee6aca42bd72583a96d06f4ba9d.tar.bz2
otp-e6a69b021bc2aee6aca42bd72583a96d06f4ba9d.zip
Merge branch 'rickard/dist-system-limit/OTP-15708'
* rickard/dist-system-limit/OTP-15708: Fail when we cannot encode term in binary
Diffstat (limited to 'erts/emulator/beam/io.c')
-rw-r--r--erts/emulator/beam/io.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/erts/emulator/beam/io.c b/erts/emulator/beam/io.c
index b961c639f5..31c941337f 100644
--- a/erts/emulator/beam/io.c
+++ b/erts/emulator/beam/io.c
@@ -4450,6 +4450,7 @@ erts_port_call(Process* c_p,
char input_buf[256];
char *bufp;
byte *endp;
+ Uint uintsz;
ErlDrvSizeT size;
int try_call;
erts_aint32_t sched_flags;
@@ -4462,7 +4463,9 @@ erts_port_call(Process* c_p,
try_call = !(sched_flags & ERTS_PTS_FLGS_FORCE_SCHEDULE_OP);
- size = erts_encode_ext_size(data);
+ if (erts_encode_ext_size(data, &uintsz) != ERTS_EXT_SZ_OK)
+ return ERTS_PORT_OP_BADARG;
+ size = (ErlDrvSizeT) uintsz;
if (!try_call)
bufp = erts_alloc(ERTS_ALC_T_DRV_CALL_DATA, size);