diff options
author | Erlang/OTP <[email protected]> | 2018-05-02 15:53:28 +0200 |
---|---|---|
committer | Erlang/OTP <[email protected]> | 2018-05-02 15:53:28 +0200 |
commit | 6faad4dd9c202931469bc25cea5a0e47aa0000dc (patch) | |
tree | de6dfc83a928aaf5410fc7ae736ad601916b7347 | |
parent | f2c1d537dc28ffbde5d42aedec70bf4c6574c3ea (diff) | |
parent | 05b1c13e36ec49891e89593b25e668e983a4fc41 (diff) | |
download | otp-6faad4dd9c202931469bc25cea5a0e47aa0000dc.tar.gz otp-6faad4dd9c202931469bc25cea5a0e47aa0000dc.tar.bz2 otp-6faad4dd9c202931469bc25cea5a0e47aa0000dc.zip |
Merge branch 'john/erts/fix-heart-command-overflow/OTP-15034/ERIERL-166' into maint-20
* john/erts/fix-heart-command-overflow/OTP-15034/ERIERL-166:
heart: Use ntohs instead of manual conversion
# Conflicts:
# lib/kernel/test/heart_SUITE.erl
-rw-r--r-- | erts/etc/common/heart.c | 5 | ||||
-rw-r--r-- | lib/kernel/test/heart_SUITE.erl | 13 |
2 files changed, 11 insertions, 7 deletions
diff --git a/erts/etc/common/heart.c b/erts/etc/common/heart.c index bc353e384e..8f1e89b638 100644 --- a/erts/etc/common/heart.c +++ b/erts/etc/common/heart.c @@ -825,11 +825,8 @@ write_message(fd, mp) int fd; struct msg *mp; { - int len; - char* tmp; + int len = ntohs(mp->len); - tmp = (char*) &(mp->len); - len = (*tmp * 256) + *(tmp+1); if ((len == 0) || (len > MSG_BODY_SIZE)) { return MSG_HDR_SIZE; } /* cc68k wants (char *) */ diff --git a/lib/kernel/test/heart_SUITE.erl b/lib/kernel/test/heart_SUITE.erl index 45032faf6d..22db24de5f 100644 --- a/lib/kernel/test/heart_SUITE.erl +++ b/lib/kernel/test/heart_SUITE.erl @@ -346,9 +346,16 @@ clear_cmd(Config) when is_list(Config) -> get_cmd(Config) when is_list(Config) -> {ok, Node} = start_check(slave, ?UNIQ_NODE_NAME), - Cmd = "test", - ok = rpc:call(Node, heart, set_cmd, [Cmd]), - {ok, Cmd} = rpc:call(Node, heart, get_cmd, []), + + ShortCmd = "test", + ok = rpc:call(Node, heart, set_cmd, [ShortCmd]), + {ok, ShortCmd} = rpc:call(Node, heart, get_cmd, []), + + %% This would hang prior to OTP-15024 being fixed. + LongCmd = [$a || _ <- lists:seq(1, 160)], + ok = rpc:call(Node, heart, set_cmd, [LongCmd]), + {ok, LongCmd} = rpc:call(Node, heart, get_cmd, []), + stop_node(Node), ok. |