From dc5f7190f16cf4552db74fba3f4e0f2d654e2594 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Mon, 28 Nov 2011 15:14:14 +0100 Subject: erts: Remove truncation of http packet parsing and return error instead This is a slight modification of previous commit by Steve Vinoski For backward compatibility of old users of decode_packet, I think it's enough to return error instead of keeping the old line truncation behaviour. --- erts/emulator/beam/packet_parser.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) (limited to 'erts/emulator/beam') diff --git a/erts/emulator/beam/packet_parser.c b/erts/emulator/beam/packet_parser.c index 8c1662dc6f..4d4b6ea196 100644 --- a/erts/emulator/beam/packet_parser.c +++ b/erts/emulator/beam/packet_parser.c @@ -405,18 +405,22 @@ int packet_get_length(enum PacketParseType htype, const char* ptr1 = ptr; int len = plen; + if (!max_plen) { + /* This is for backward compatibility with old user of decode_packet + * that might use option 'line_length' to limit accepted length of + * http lines. + */ + max_plen = trunc_len; + } + while (1) { const char* ptr2 = memchr(ptr1, '\n', len); if (ptr2 == NULL) { if (max_plen != 0) { - if (n > max_plen) /* packet full */ + if (n >= max_plen) /* packet full */ goto error; } - else if (n >= trunc_len && trunc_len!=0) { /* buffer full */ - plen = trunc_len; - goto done; - } goto more; } else { @@ -425,8 +429,6 @@ int packet_get_length(enum PacketParseType htype, if (*statep == 0) { if (max_plen != 0 && plen > max_plen) goto error; - if (plen >= trunc_len && trunc_len != 0) - plen = trunc_len; goto done; } @@ -439,18 +441,12 @@ int packet_get_length(enum PacketParseType htype, else { if (max_plen != 0 && plen > max_plen) goto error; - if (plen >= trunc_len && trunc_len != 0) - plen = trunc_len; goto done; } } else { if (max_plen != 0 && plen > max_plen) goto error; - if (plen >= trunc_len && trunc_len != 0) { - plen = trunc_len; - goto done; - } goto more; } } -- cgit v1.2.3