aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/dist.c
diff options
context:
space:
mode:
authorRickard Green <[email protected]>2018-08-21 15:07:15 +0200
committerRickard Green <[email protected]>2018-08-21 15:07:15 +0200
commit9672921fb8afd82cbb449b3a57f2c2f0b4b0e975 (patch)
tree4808460110d2a9eb7449b22ffcf57245e2b582b3 /erts/emulator/beam/dist.c
parentbcba1f261306beddf3463a471399e6a2fa90c99f (diff)
parentee4d5eb50da8fcf06807ae53835b3d1c3e0215e0 (diff)
downloadotp-9672921fb8afd82cbb449b3a57f2c2f0b4b0e975.tar.gz
otp-9672921fb8afd82cbb449b3a57f2c2f0b4b0e975.tar.bz2
otp-9672921fb8afd82cbb449b3a57f2c2f0b4b0e975.zip
Merge branch 'max-au/dist_msg_too_long'
* max-au/dist_msg_too_long: Cleanup unused dist output buf immediately instead of at GC Throw 'system_limit' when distribution message size exceed INT_MAX instead of crashing emulator with 'Absurdly large distribution data buffer'
Diffstat (limited to 'erts/emulator/beam/dist.c')
-rw-r--r--erts/emulator/beam/dist.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/erts/emulator/beam/dist.c b/erts/emulator/beam/dist.c
index 146c00b07d..db594a23a0 100644
--- a/erts/emulator/beam/dist.c
+++ b/erts/emulator/beam/dist.c
@@ -1924,6 +1924,12 @@ erts_dsig_send(ErtsDSigData *dsdp, struct erts_dsig_send_context* ctx)
ASSERT(ctx->obuf->ext_endp <= &ctx->obuf->data[0] + ctx->data_size);
ctx->data_size = ctx->obuf->ext_endp - ctx->obuf->extp;
+ if (ctx->data_size > (Uint) INT_MAX) {
+ free_dist_obuf(ctx->obuf);
+ ctx->obuf = NULL;
+ retval = ERTS_DSIG_SEND_TOO_LRG;
+ goto done;
+ }
ctx->obuf->hopefull_flags = ctx->u.ec.hopefull_flags;
/*