aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rtsp.c
diff options
context:
space:
mode:
authorDario Lombardo <lomato@gmail.com>2016-10-06 12:25:00 +0200
committerMichael Mann <mmann78@netscape.net>2016-10-07 11:51:05 +0000
commita239472f303b1b482b5ec91e631a16d3ae3c90ce (patch)
treec92561ed3f324bfa91ab2323b8adcd9cf9e4a70f /epan/dissectors/packet-rtsp.c
parentdd5a1f6c6660a9c81513eda8097e26a9a9367ef0 (diff)
rtsp: use ws_strto[u|i] functions.
Change-Id: Id3fa0b4d3a99004ab74be329e13e95c47e11ab72 Reviewed-on: https://code.wireshark.org/review/18091 Petri-Dish: Dario Lombardo <lomato@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-rtsp.c')
-rw-r--r--epan/dissectors/packet-rtsp.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/epan/dissectors/packet-rtsp.c b/epan/dissectors/packet-rtsp.c
index 6858be26bf..255db652ad 100644
--- a/epan/dissectors/packet-rtsp.c
+++ b/epan/dissectors/packet-rtsp.c
@@ -30,7 +30,6 @@
#include "config.h"
#include <stdio.h> /* for sscanf() */
-#include <stdlib.h> /* for atoi() and strtoul() */
#include <epan/packet.h>
#include <epan/req_resp_hdrs.h>
@@ -41,6 +40,7 @@
#include <epan/tap-voip.h>
#include <epan/stats_tree.h>
#include <wsutil/str_util.h>
+#include <wsutil/strtoi.h>
#include "packet-rdt.h"
#include "packet-rtp.h"
@@ -140,6 +140,8 @@ static expert_field ei_rtsp_unknown_transport_type = EI_INIT;
static expert_field ei_rtsp_bad_server_port = EI_INIT;
static expert_field ei_rtsp_bad_client_port = EI_INIT;
static expert_field ei_rtsp_bad_interleaved_channel = EI_INIT;
+static expert_field ei_rtsp_content_length_invalid = EI_INIT;
+static expert_field ei_rtsp_rdtfeaturelevel_invalid = EI_INIT;
static dissector_handle_t rtp_handle;
static dissector_handle_t rtcp_handle;
@@ -463,7 +465,7 @@ is_rtsp_request_or_reply(const guchar *line, size_t linelen, rtsp_type_t *type)
if (tokenlen >= 3) {
memcpy(response_chars, token, 3);
response_chars[3] = '\0';
- rtsp_stat_info->response_code = (guint)strtoul(response_chars, NULL, 10);
+ ws_strtou32(response_chars, NULL, &rtsp_stat_info->response_code);
}
}
return TRUE;
@@ -663,9 +665,9 @@ rtsp_get_content_length(const guchar *line_begin, size_t line_len)
{
guchar buf[256];
guchar *tmp;
- long content_length;
- char *p;
- guchar *up;
+ guint32 content_length;
+ const char *p;
+ const guchar *up;
if (line_len > sizeof(buf) - 1) {
/*
@@ -679,7 +681,7 @@ rtsp_get_content_length(const guchar *line_begin, size_t line_len)
tmp = buf + STRLEN_CONST(rtsp_content_length);
while (*tmp && g_ascii_isspace(*tmp))
tmp++;
- content_length = strtol(tmp, &p, 10);
+ ws_strtoi32(tmp, &p, &content_length);
up = p;
if (up == tmp || (*up != '\0' && !g_ascii_isspace(*up)))
return -1; /* not a valid number */
@@ -1068,10 +1070,15 @@ dissect_rtspmessage(tvbuff_t *tvb, int offset, packet_info *pinfo,
} else if (HDR_MATCHES(rtsp_content_length))
{
- proto_tree_add_uint(rtsp_tree, hf_rtsp_content_length,
- tvb, offset, linelen,
- atoi(tvb_format_text(tvb, value_offset,
- value_len)));
+ guint32 clength;
+ gboolean clength_valid;
+ proto_item* pi;
+ clength_valid = ws_strtou32(tvb_format_text(tvb, value_offset, value_len),
+ NULL, &clength);
+ pi = proto_tree_add_uint(rtsp_tree, hf_rtsp_content_length,
+ tvb, offset, linelen, clength);
+ if (!clength_valid)
+ expert_add_info(pinfo, pi, &ei_rtsp_content_length_invalid);
/*
* Only the amount specified by the
@@ -1112,12 +1119,14 @@ dissect_rtspmessage(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
} else if (HDR_MATCHES(rtsp_rdt_feature_level))
{
- rdt_feature_level = atoi(tvb_format_text(tvb, value_offset,
- value_len));
- proto_tree_add_uint(rtsp_tree, hf_rtsp_rdtfeaturelevel,
- tvb, offset, linelen,
- atoi(tvb_format_text(tvb, value_offset,
- value_len)));
+ gboolean rdt_feature_level_valid;
+ proto_item* pi;
+ rdt_feature_level_valid = ws_strtou32(tvb_format_text(tvb, value_offset, value_len),
+ NULL, &rdt_feature_level);
+ pi = proto_tree_add_uint(rtsp_tree, hf_rtsp_rdtfeaturelevel,
+ tvb, offset, linelen, rdt_feature_level);
+ if (!rdt_feature_level_valid)
+ expert_add_info(pinfo, pi, &ei_rtsp_rdtfeaturelevel_invalid);
}
else
{
@@ -1449,6 +1458,10 @@ proto_register_rtsp(void)
{ "rtsp.bad_client_port", PI_UNDECODED, PI_WARN, "Bad client port", EXPFILL }},
{ &ei_rtsp_bad_interleaved_channel,
{ "rtsp.bad_interleaved_channel", PI_UNDECODED, PI_WARN, "Bad interleaved_channel", EXPFILL }},
+ { &ei_rtsp_content_length_invalid,
+ { "rtsp.content-length.invalid", PI_MALFORMED, PI_ERROR, "Invalid content length", EXPFILL }},
+ { &ei_rtsp_rdtfeaturelevel_invalid,
+ { "rtsp.rdt-feature-level.invalid", PI_MALFORMED, PI_ERROR, "Invalid RDTFeatureLevel", EXPFILL }}
};
module_t *rtsp_module;
@@ -1539,7 +1552,7 @@ proto_reg_handoff_rtsp(void)
* Local variables:
* c-basic-offset: 4
* tab-width: 8
- * indent-tabs-mode: nil
+ * indent-tabs-mode: space
* End:
*
* vi: set shiftwidth=4 tabstop=8 expandtab: