diff options
author | Rickard Green <[email protected]> | 2018-08-21 15:07:15 +0200 |
---|---|---|
committer | Rickard Green <[email protected]> | 2018-08-21 15:07:15 +0200 |
commit | 9672921fb8afd82cbb449b3a57f2c2f0b4b0e975 (patch) | |
tree | 4808460110d2a9eb7449b22ffcf57245e2b582b3 /erts/emulator/beam/dist.c | |
parent | bcba1f261306beddf3463a471399e6a2fa90c99f (diff) | |
parent | ee4d5eb50da8fcf06807ae53835b3d1c3e0215e0 (diff) | |
download | otp-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.c | 6 |
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; /* |