diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/ChangeLog libhtp-0.5.32.202004281602~ubuntu19.10.1/ChangeLog --- libhtp-0.5.32.202004242203~ubuntu19.10.1/ChangeLog 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/ChangeLog 2020-04-28 16:02:10.000000000 +0000 @@ -1,3 +1,12 @@ +0.5.33 (27 April 2020) +---------------------- + +- compression bomb protection + +- memory handling issue found by Oss-Fuzz + +- improve handling of anomalies in traffic + 0.5.32 (13 December 2019) -------------------------- diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/debian/bzr-builder.manifest libhtp-0.5.32.202004281602~ubuntu19.10.1/debian/bzr-builder.manifest --- libhtp-0.5.32.202004242203~ubuntu19.10.1/debian/bzr-builder.manifest 2020-04-24 22:04:15.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/debian/bzr-builder.manifest 2020-04-28 16:02:16.000000000 +0000 @@ -1,3 +1,3 @@ -# bzr-builder format 0.3 deb-version 1:0.5.32.202004242203 -lp:~oisf/suricata-daily-git-libhtp-0.5.x/libhtp revid:git-v1:e954fed3f875c0d3515576ca6bff0ae239f10834 +# bzr-builder format 0.3 deb-version 1:0.5.32.202004281602 +lp:~oisf/suricata-daily-git-libhtp-0.5.x/libhtp revid:git-v1:1e5c2a075ee8311917448ebf57631f8b1bf4aba3 nest-part packaging lp:~oisf/suricata-daily-git-test/suricata-packaging-git libhtp/debian debian revid:petermanev@gmail.com-20191210204031-aom8wre7sfjh39zq diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/debian/changelog libhtp-0.5.32.202004281602~ubuntu19.10.1/debian/changelog --- libhtp-0.5.32.202004242203~ubuntu19.10.1/debian/changelog 2020-04-24 22:04:15.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/debian/changelog 2020-04-28 16:02:16.000000000 +0000 @@ -1,8 +1,8 @@ -libhtp (1:0.5.32.202004242203~ubuntu19.10.1) eoan; urgency=low +libhtp (1:0.5.32.202004281602~ubuntu19.10.1) eoan; urgency=low * Auto build. - -- Peter Manev Fri, 24 Apr 2020 22:04:15 +0000 + -- Peter Manev Tue, 28 Apr 2020 16:02:16 +0000 htp (0.2.13-2ubuntu2) precise; urgency=low diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_private.h libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_private.h --- libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_private.h 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_private.h 2020-04-28 16:02:10.000000000 +0000 @@ -161,7 +161,7 @@ int htp_connp_is_line_folded(unsigned char *data, size_t len); int htp_is_folding_char(int c); -int htp_connp_is_line_terminator(htp_connp_t *connp, unsigned char *data, size_t len); +int htp_connp_is_line_terminator(htp_connp_t *connp, unsigned char *data, size_t len, int next_no_lf); int htp_connp_is_line_ignorable(htp_connp_t *connp, unsigned char *data, size_t len); int htp_parse_uri(bstr *input, htp_uri_t **uri); diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_request.c libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_request.c --- libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_request.c 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_request.c 2020-04-28 16:02:10.000000000 +0000 @@ -647,7 +647,7 @@ #endif // Should we terminate headers? - if (htp_connp_is_line_terminator(connp, data, len)) { + if (htp_connp_is_line_terminator(connp, data, len, 0)) { // Parse previous header, if any. if (connp->in_header != NULL) { if (connp->cfg->process_request_header(connp, bstr_ptr(connp->in_header), @@ -816,6 +816,10 @@ htp_status_t htp_connp_REQ_LINE(htp_connp_t *connp) { for (;;) { // Get one byte + IN_PEEK_NEXT(connp); + if (connp->in_status == HTP_STREAM_CLOSED && connp->in_next_byte == -1) { + return htp_connp_REQ_LINE_complete(connp); + } IN_COPY_BYTE_OR_RETURN(connp); // Have we reached the end of the line? diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_response.c libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_response.c --- libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_response.c 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_response.c 2020-04-28 16:02:10.000000000 +0000 @@ -826,8 +826,13 @@ fprint_raw_data(stderr, __func__, data, len); #endif + int next_no_lf = 0; + if (connp->out_current_read_offset < connp->out_current_len && + connp->out_current_data[connp->out_current_read_offset] != LF) { + next_no_lf = 1; + } // Should we terminate headers? - if (htp_connp_is_line_terminator(connp, data, len)) { + if (htp_connp_is_line_terminator(connp, data, len, next_no_lf)) { // Parse previous header, if any. if (connp->out_header != NULL) { if (connp->cfg->process_response_header(connp, bstr_ptr(connp->out_header), diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_transaction.c libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_transaction.c --- libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_transaction.c 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_transaction.c 2020-04-28 16:02:10.000000000 +0000 @@ -1393,10 +1393,6 @@ * or a overly long request */ if (tx->request_method == HTP_M_UNKNOWN && tx->request_uri == NULL && tx->connp->in_state == htp_connp_REQ_LINE) { htp_log(tx->connp, HTP_LOG_MARK, HTP_LOG_WARNING, 0, "Request line incomplete"); - - if (htp_connp_REQ_LINE_complete(tx->connp) != HTP_OK) { - return HTP_ERROR; - } } return HTP_OK; diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_util.c libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_util.c --- libhtp-0.5.32.202004242203~ubuntu19.10.1/htp/htp_util.c 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/htp/htp_util.c 2020-04-28 16:02:10.000000000 +0000 @@ -464,7 +464,7 @@ * @param[in] len * @return 0 or 1 */ -int htp_connp_is_line_terminator(htp_connp_t *connp, unsigned char *data, size_t len) { +int htp_connp_is_line_terminator(htp_connp_t *connp, unsigned char *data, size_t len, int next_no_lf) { // Is this the end of request headers? switch (connp->cfg->server_personality) { case HTP_SERVER_IIS_5_1: @@ -481,10 +481,7 @@ } // Only space is terminator if terminator does not follow right away if (len == 2 && htp_is_lws(data[0]) && data[1] == LF) { - if (connp->out_current_read_offset < connp->out_current_len && - connp->out_current_data[connp->out_current_read_offset] != LF) { - return 1; - } + return next_no_lf; } break; } @@ -501,7 +498,7 @@ * @return 0 or 1 */ int htp_connp_is_line_ignorable(htp_connp_t *connp, unsigned char *data, size_t len) { - return htp_connp_is_line_terminator(connp, data, len); + return htp_connp_is_line_terminator(connp, data, len, 0); } static htp_status_t htp_parse_port(unsigned char *data, size_t len, int *port, int *invalid) { diff -Nru libhtp-0.5.32.202004242203~ubuntu19.10.1/VERSION libhtp-0.5.32.202004281602~ubuntu19.10.1/VERSION --- libhtp-0.5.32.202004242203~ubuntu19.10.1/VERSION 2020-04-24 22:03:49.000000000 +0000 +++ libhtp-0.5.32.202004281602~ubuntu19.10.1/VERSION 2020-04-28 16:02:10.000000000 +0000 @@ -1,2 +1,2 @@ # This file is intended to be sourced by sh -PKG_VERSION=0.5.32 +PKG_VERSION=0.5.33