TS-4062: CID 1341763: Free data when error This closes #370
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/88c35d77 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/88c35d77 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/88c35d77 Branch: refs/heads/master Commit: 88c35d77a8897325f0cecfc4c844938bbffa6035 Parents: a68d583 Author: Masaori Koshiba <masa...@apache.org> Authored: Wed Dec 9 11:29:20 2015 +0900 Committer: Masaori Koshiba <masa...@apache.org> Committed: Thu Dec 10 10:35:23 2015 +0900 ---------------------------------------------------------------------- proxy/http2/HPACK.cc | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/88c35d77/proxy/http2/HPACK.cc ---------------------------------------------------------------------- diff --git a/proxy/http2/HPACK.cc b/proxy/http2/HPACK.cc index 7e4b2fc..51b9a2f 100644 --- a/proxy/http2/HPACK.cc +++ b/proxy/http2/HPACK.cc @@ -347,14 +347,26 @@ encode_string(uint8_t *buf_start, const uint8_t *buf_end, const char *value, siz // Length const int64_t len = encode_integer(p, buf_end, data_len, 7); - if (len == -1) + if (len == -1) { + if (use_huffman) { + ats_free(data); + } + return -1; + } + if (use_huffman) { *p |= 0x80; } p += len; - if (buf_end < p || buf_end - p < data_len) + + if (buf_end < p || buf_end - p < data_len) { + if (use_huffman) { + ats_free(data); + } + return -1; + } // Value memcpy(p, data, data_len);