aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--epan/dissectors/packet-ber.c6
-rw-r--r--epan/dissectors/packet-per.c6
-rw-r--r--epan/osi-utils.c68
-rw-r--r--epan/osi-utils.h6
-rw-r--r--epan/sna-utils.c10
-rw-r--r--epan/sna-utils.h2
-rw-r--r--epan/to_str.c72
-rw-r--r--epan/to_str.h6
-rw-r--r--epan/value_string.c4
-rw-r--r--epan/xdlc.c14
10 files changed, 100 insertions, 94 deletions
diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c
index 07e1ea5575..8fd6787381 100644
--- a/epan/dissectors/packet-ber.c
+++ b/epan/dissectors/packet-ber.c
@@ -69,6 +69,7 @@
#include <epan/strutil.h>
#include <epan/to_str.h>
#include <epan/prefs.h>
+#include <epan/emem.h>
#include "packet-ber.h"
@@ -1554,9 +1555,10 @@ int dissect_ber_object_identifier(gboolean implicit_tag, packet_info *pinfo, pro
gint32 tag;
guint32 len;
int eoffset;
- char str[MAX_OID_STR_LEN], *name;
+ char *str, *name;
proto_item *item;
+ str=ep_alloc(MAX_OID_STR_LEN);
#ifdef DEBUG_BER
{
char *name;
@@ -1595,7 +1597,7 @@ printf("OBJECT IDENTIFIER dissect_ber_object_identifier(%s) entered\n",name);
eoffset=offset+len;
}
- oid_to_str_buf(tvb_get_ptr(tvb, offset, len), len, str);
+ oid_to_str_buf(tvb_get_ptr(tvb, offset, len), len, str, MAX_OID_STR_LEN);
offset += len;
if(hf_id != -1) {
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c
index a95aa17043..590c5d773c 100644
--- a/epan/dissectors/packet-per.c
+++ b/epan/dissectors/packet-per.c
@@ -40,6 +40,7 @@ proper helper routines
#include <epan/to_str.h>
#include <epan/prefs.h>
+#include <epan/emem.h>
#include "packet-per.h"
#include "packet-ber.h"
@@ -584,19 +585,20 @@ guint32
dissect_per_object_identifier(tvbuff_t *tvb, guint32 offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index, char *value_string)
{
gint length;
- char str[MAX_OID_STR_LEN], *name;
+ char *str, *name;
proto_tree *etr=NULL;
proto_item *item;
DEBUG_ENTRY("dissect_per_object_identifier");
+ str=ep_alloc(MAX_OID_STR_LEN);
if(display_internal_per_fields){
etr=tree;
}
offset = dissect_per_length_determinant(tvb, offset, pinfo, etr, hf_per_object_identifier_length, &length);
- oid_to_str_buf(tvb_get_ptr(tvb, offset>>3, length), length, str);
+ oid_to_str_buf(tvb_get_ptr(tvb, offset>>3, length), length, str, MAX_OID_STR_LEN);
item = proto_tree_add_string(tree, hf_index, tvb, offset>>3, length, str);
offset += 8 * length;
diff --git a/epan/osi-utils.c b/epan/osi-utils.c
index 95283d6bd0..79ecb2d8e4 100644
--- a/epan/osi-utils.c
+++ b/epan/osi-utils.c
@@ -42,35 +42,35 @@ print_nsap_net( const guint8 *ad, int length )
gchar *cur;
cur = ep_alloc(MAX_NSAP_LEN * 3 + 50);
- print_nsap_net_buf( ad, length, cur );
+ print_nsap_net_buf( ad, length, cur, MAX_NSAP_LEN * 3 + 50);
return( cur );
}
void
-print_nsap_net_buf( const guint8 *ad, int length, gchar *buf )
+print_nsap_net_buf( const guint8 *ad, int length, gchar *buf, int buf_len)
{
gchar *cur;
/* to do : NSAP / NET decoding */
if ( (length <= 0 ) || ( length > MAX_NSAP_LEN ) ) {
- sprintf( buf, "<Invalid length of NSAP>");
+ g_snprintf(buf, buf_len, "<Invalid length of NSAP>");
return;
}
cur = buf;
if ( ( length == RFC1237_NSAP_LEN ) || ( length == RFC1237_NSAP_LEN + 1 ) ) {
- print_area_buf( ad, RFC1237_FULLAREA_LEN, cur );
+ print_area_buf(ad, RFC1237_FULLAREA_LEN, cur, buf_len-(cur-buf));
cur += strlen( cur );
- print_system_id_buf( ad + RFC1237_FULLAREA_LEN, RFC1237_SYSTEMID_LEN, cur );
+ print_system_id_buf( ad + RFC1237_FULLAREA_LEN, RFC1237_SYSTEMID_LEN, cur, buf_len-(cur-buf));
cur += strlen( cur );
- cur += sprintf( cur, "[%02x]",
+ cur += g_snprintf(cur, buf_len-(cur-buf), "[%02x]",
ad[ RFC1237_FULLAREA_LEN + RFC1237_SYSTEMID_LEN ] );
if ( length == RFC1237_NSAP_LEN + 1 ) {
- cur += sprintf( cur, "-%02x", ad[ length -1 ] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "-%02x", ad[ length -1 ] );
}
}
else { /* probably format as standard */
- print_area_buf( ad, length, buf );
+ print_area_buf( ad, length, buf, buf_len);
}
} /* print_nsap */
@@ -80,18 +80,18 @@ print_system_id( const guint8 *ad, int length )
gchar *cur;
cur = ep_alloc(MAX_SYSTEMID_LEN * 3 + 5);
- print_system_id_buf(ad, length, cur );
+ print_system_id_buf(ad, length, cur, MAX_SYSTEMID_LEN * 3 + 5);
return( cur );
}
void
-print_system_id_buf( const guint8 *ad, int length, gchar *buf )
+print_system_id_buf( const guint8 *ad, int length, gchar *buf, int buf_len)
{
gchar *cur;
int tmp;
if ( ( length <= 0 ) || ( length > MAX_SYSTEMID_LEN ) ) {
- sprintf( buf, "<Invalid length of SYSTEM ID>");
+ g_snprintf(buf, buf_len, "<Invalid length of SYSTEM ID>");
return;
}
@@ -99,30 +99,30 @@ print_system_id_buf( const guint8 *ad, int length, gchar *buf )
if ( ( 6 == length ) || /* System-ID */
( 7 == length ) || /* LAN-ID */
( 8 == length )) { /* LSP-ID */
- cur += sprintf(cur, "%02x%02x.%02x%02x.%02x%02x", ad[0], ad[1],
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x%02x.%02x%02x.%02x%02x", ad[0], ad[1],
ad[2], ad[3], ad[4], ad[5] );
if ( ( 7 == length ) ||
( 8 == length )) {
- cur += sprintf( cur, ".%02x", ad[6] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), ".%02x", ad[6] );
}
if ( 8 == length ) {
- cur += sprintf( cur, "-%02x", ad[7] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "-%02x", ad[7] );
}
}
else {
tmp = 0;
while ( tmp < length / 4 ) { /* 16 / 4 == 4 > four Octets left to print */
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x.", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x.", ad[tmp++] );
}
if ( 1 == tmp ) { /* Special case for Designated IS */
- sprintf( --cur, ".%02x", ad[tmp] );
+ g_snprintf(--cur, buf_len-(cur-buf), ".%02x", ad[tmp] );
}
else {
for ( ; tmp < length; ) { /* print the rest without dot */
- cur += sprintf( cur, "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
}
}
}
@@ -134,12 +134,12 @@ print_area(const guint8 *ad, int length)
gchar *cur;
cur = ep_alloc(MAX_AREA_LEN * 3 + 20);
- print_area_buf( ad, length, cur );
+ print_area_buf(ad, length, cur, MAX_AREA_LEN * 3 + 20);
return cur;
}
void
-print_area_buf(const guint8 *ad, int length, gchar *buf)
+print_area_buf(const guint8 *ad, int length, gchar *buf, int buf_len)
{
gchar *cur;
int tmp = 0;
@@ -148,7 +148,7 @@ print_area_buf(const guint8 *ad, int length, gchar *buf)
* and take away all these stupid resource consuming local statics
*/
if (length <= 0 || length > MAX_AREA_LEN) {
- sprintf( buf, "<Invalid length of AREA>");
+ g_snprintf(buf, buf_len, "<Invalid length of AREA>");
return;
}
@@ -163,36 +163,36 @@ print_area_buf(const guint8 *ad, int length, gchar *buf)
) { /* AFI is good and length is long enough */
if ( length > RFC1237_FULLAREA_LEN + 1 ) { /* Special Case Designated IS */
- sprintf( buf, "<Invalid length of AREA for DCC / GOSIP AFI>");
+ g_snprintf(buf, buf_len, "<Invalid length of AREA for DCC / GOSIP AFI>");
return;
}
- cur += sprintf( cur, "[%02x|%02x:%02x][%02x|%02x:%02x:%02x|%02x:%02x]",
+ cur += g_snprintf(cur, buf_len-(cur-buf), "[%02x|%02x:%02x][%02x|%02x:%02x:%02x|%02x:%02x]",
ad[0], ad[1], ad[2], ad[3], ad[4],
ad[5], ad[6], ad[7], ad[8] );
- cur += sprintf( cur, "[%02x:%02x|%02x:%02x]",
+ cur += g_snprintf(cur, buf_len-(cur-buf), "[%02x:%02x|%02x:%02x]",
ad[9], ad[10], ad[11], ad[12] );
if ( RFC1237_FULLAREA_LEN + 1 == length )
- sprintf( cur, "-[%02x]", ad[20] );
+ g_snprintf(cur, buf_len-(cur-buf), "-[%02x]", ad[20] );
}
else { /* print standard format */
if ( length == RFC1237_AREA_LEN ) {
- sprintf( buf, "%02x.%02x%02x", ad[0], ad[1], ad[2] );
+ g_snprintf(buf, buf_len, "%02x.%02x%02x", ad[0], ad[1], ad[2] );
return;
}
if ( 4 < length ) {
while ( tmp < length / 4 ) { /* 16/4==4 > four Octets left to print */
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x", ad[tmp++] );
- cur += sprintf( cur, "%02x.", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x.", ad[tmp++] );
}
if ( 1 == tmp ) { /* Special case for Designated IS */
- sprintf( --cur, "-%02x", ad[tmp] );
+ g_snprintf(--cur, buf_len-(cur-buf), "-%02x", ad[tmp] );
}
else {
for ( ; tmp < length; ) { /* print the rest without dot */
- cur += sprintf( cur, "%02x", ad[tmp++] );
+ cur += g_snprintf(cur, buf_len-(cur-buf), "%02x", ad[tmp++] );
}
}
}
diff --git a/epan/osi-utils.h b/epan/osi-utils.h
index bfdd30bba5..fc8565f032 100644
--- a/epan/osi-utils.h
+++ b/epan/osi-utils.h
@@ -48,10 +48,10 @@
#define NSAP_IDI_GOSIP2 0x47
gchar* print_nsap_net ( const guint8 *, int );
-void print_nsap_net_buf( const guint8 *, int, gchar * );
+void print_nsap_net_buf( const guint8 *, int, gchar *, int);
gchar* print_area ( const guint8 *, int );
-void print_area_buf ( const guint8 *, int, gchar * );
+void print_area_buf ( const guint8 *, int, gchar *, int);
gchar* print_system_id( const guint8 *, int );
-void print_system_id_buf( const guint8 *, int, gchar * );
+void print_system_id_buf( const guint8 *, int, gchar *, int);
#endif /* __OSI_UTILS_H__ */
diff --git a/epan/sna-utils.c b/epan/sna-utils.c
index 5b5888bb92..132a5cfe4b 100644
--- a/epan/sna-utils.c
+++ b/epan/sna-utils.c
@@ -40,29 +40,29 @@ sna_fid_to_str(const address *addr)
gchar *cur;
cur=ep_alloc(14);
- sna_fid_to_str_buf(addr, cur);
+ sna_fid_to_str_buf(addr, cur, 14);
return cur;
}
void
-sna_fid_to_str_buf(const address *addr, gchar *buf)
+sna_fid_to_str_buf(const address *addr, gchar *buf, int buf_len)
{
struct sna_fid_type_4_addr sna_fid_type_4_addr;
switch (addr->len) {
case 1:
- sprintf(buf, "%04X", addr->data[0]);
+ g_snprintf(buf, buf_len, "%04X", addr->data[0]);
break;
case 2:
- sprintf(buf, "%04X", pntohs(&addr->data[0]));
+ g_snprintf(buf, buf_len, "%04X", pntohs(&addr->data[0]));
break;
case SNA_FID_TYPE_4_ADDR_LEN:
/* FID Type 4 */
memcpy(&sna_fid_type_4_addr, addr->data, SNA_FID_TYPE_4_ADDR_LEN);
- sprintf(buf, "%08X.%04X", sna_fid_type_4_addr.saf,
+ g_snprintf(buf, buf_len, "%08X.%04X", sna_fid_type_4_addr.saf,
sna_fid_type_4_addr.ef);
break;
}
diff --git a/epan/sna-utils.h b/epan/sna-utils.h
index d8125edb28..6f9b12c5e9 100644
--- a/epan/sna-utils.h
+++ b/epan/sna-utils.h
@@ -36,6 +36,6 @@ struct sna_fid_type_4_addr {
};
extern gchar *sna_fid_to_str(const address *addr);
-extern void sna_fid_to_str_buf(const address *addr, gchar *buf);
+extern void sna_fid_to_str_buf(const address *addr, gchar *buf, int buf_len);
#endif
diff --git a/epan/to_str.c b/epan/to_str.c
index 7c73091d62..3e00274fe0 100644
--- a/epan/to_str.c
+++ b/epan/to_str.c
@@ -243,10 +243,10 @@ ipx_addr_to_str(guint32 net, const guint8 *ad)
name = get_ether_name_if_known(ad);
if (name) {
- sprintf(buf, "%s.%s", get_ipxnet_name(net), name);
+ g_snprintf(buf, 8+1+MAXNAMELEN+1, "%s.%s", get_ipxnet_name(net), name);
}
else {
- sprintf(buf, "%s.%s", get_ipxnet_name(net),
+ g_snprintf(buf, 8+1+MAXNAMELEN+1, "%s.%s", get_ipxnet_name(net),
bytestring_to_str(ad, 6, '\0'));
}
return buf;
@@ -303,14 +303,14 @@ vines_addr_to_str(const guint8 *addrp)
buf=ep_alloc(214);
- vines_addr_to_str_buf(addrp, buf);
+ vines_addr_to_str_buf(addrp, buf, 214);
return buf;
}
void
-vines_addr_to_str_buf(const guint8 *addrp, gchar *buf)
+vines_addr_to_str_buf(const guint8 *addrp, gchar *buf, int buf_len)
{
- sprintf(buf, "%08x.%04x", pntohl(&addrp[0]), pntohs(&addrp[4]));
+ g_snprintf(buf, buf_len, "%08x.%04x", pntohl(&addrp[0]), pntohs(&addrp[4]));
}
#define PLURALIZE(n) (((n) > 1) ? "s" : "")
@@ -333,7 +333,7 @@ vines_addr_to_str_buf(const guint8 *addrp, gchar *buf)
*/
static void
time_secs_to_str_buf(gint32 time, guint32 frac, gboolean is_nsecs,
- gchar *buf)
+ gchar *buf, int buf_len)
{
static gchar *p;
int hours, mins, secs;
@@ -346,7 +346,7 @@ time_secs_to_str_buf(gint32 time, guint32 frac, gboolean is_nsecs,
}
if(time<0){ /* We've overflowed. */
- sprintf(buf, "Unable to cope with time value %d", time);
+ g_snprintf(buf, buf_len, "Unable to cope with time value %d", time);
return;
}
@@ -360,28 +360,25 @@ time_secs_to_str_buf(gint32 time, guint32 frac, gboolean is_nsecs,
/* This would probably be cleaner if we used GStrings instead. */
p = buf;
if (time != 0) {
- sprintf(p, "%s%u day%s", time?msign:"", time, PLURALIZE(time));
- p += strlen(p);
+ p += g_snprintf(p, buf_len, "%s%u day%s", time?msign:"", time, PLURALIZE(time));
do_comma = TRUE;
}
if (hours != 0) {
- sprintf(p, "%s%s%u hour%s", COMMA(do_comma), hours?msign:"", hours, PLURALIZE(hours));
- p += strlen(p);
+ p += g_snprintf(p, buf_len-(p-buf), "%s%s%u hour%s", COMMA(do_comma), hours?msign:"", hours, PLURALIZE(hours));
do_comma = TRUE;
}
if (mins != 0) {
- sprintf(p, "%s%s%u minute%s", COMMA(do_comma), mins?msign:"", mins, PLURALIZE(mins));
- p += strlen(p);
+ p += g_snprintf(p, buf_len-(p-buf), "%s%s%u minute%s", COMMA(do_comma), mins?msign:"", mins, PLURALIZE(mins));
do_comma = TRUE;
}
if (secs != 0 || frac != 0) {
if (frac != 0) {
if (is_nsecs)
- sprintf(p, "%s%s%u.%09u seconds", COMMA(do_comma), msign, secs, frac);
+ p += g_snprintf(p, buf_len-(p-buf), "%s%s%u.%09u seconds", COMMA(do_comma), msign, secs, frac);
else
- sprintf(p, "%s%s%u.%03u seconds", COMMA(do_comma), msign, secs, frac);
+ p += g_snprintf(p, buf_len-(p-buf), "%s%s%u.%03u seconds", COMMA(do_comma), msign, secs, frac);
} else
- sprintf(p, "%s%s%u second%s", COMMA(do_comma), msign, secs, PLURALIZE(secs));
+ p += g_snprintf(p, buf_len-(p-buf), "%s%s%u second%s", COMMA(do_comma), msign, secs, PLURALIZE(secs));
}
}
@@ -393,11 +390,11 @@ time_secs_to_str(gint32 time)
buf=ep_alloc(TIME_SECS_LEN+1);
if (time == 0) {
- sprintf(buf, "0 time");
+ g_snprintf(buf, TIME_SECS_LEN+1, "0 time");
return buf;
}
- time_secs_to_str_buf(time, 0, FALSE, buf);
+ time_secs_to_str_buf(time, 0, FALSE, buf, TIME_SECS_LEN+1);
return buf;
}
@@ -410,7 +407,7 @@ time_msecs_to_str(gint32 time)
buf=ep_alloc(TIME_SECS_LEN+1+3+1);
if (time == 0) {
- sprintf(buf, "0 time");
+ g_snprintf(buf, TIME_SECS_LEN+1+3+1, "0 time");
return buf;
}
@@ -425,7 +422,7 @@ time_msecs_to_str(gint32 time)
time /= 1000;
}
- time_secs_to_str_buf(time, msecs, FALSE, buf);
+ time_secs_to_str_buf(time, msecs, FALSE, buf, TIME_SECS_LEN+1+3+1);
return buf;
}
@@ -454,7 +451,8 @@ abs_time_to_str(nstime_t *abs_time)
tmp = localtime(&abs_time->secs);
if (tmp) {
- sprintf(buf, "%s %2d, %d %02d:%02d:%02d.%09ld",
+ g_snprintf(buf, 3+1+2+2+4+1+2+1+2+1+2+1+9+1,
+ "%s %2d, %d %02d:%02d:%02d.%09ld",
mon_names[tmp->tm_mon],
tmp->tm_mday,
tmp->tm_year + 1900,
@@ -477,7 +475,8 @@ abs_time_secs_to_str(time_t abs_time)
tmp = localtime(&abs_time);
if (tmp) {
- sprintf(buf, "%s %2d, %d %02d:%02d:%02d",
+ g_snprintf(buf, 3+1+2+2+4+1+2+1+2+1+2+1,
+ "%s %2d, %d %02d:%02d:%02d",
mon_names[tmp->tm_mon],
tmp->tm_mday,
tmp->tm_year + 1900,
@@ -544,7 +543,7 @@ rel_time_to_str(nstime_t *rel_time)
time = rel_time->secs;
nsec = rel_time->nsecs;
if (time == 0 && nsec == 0) {
- sprintf(buf, "0.000000000 seconds");
+ g_snprintf(buf, 1+TIME_SECS_LEN+1+6+1, "0.000000000 seconds");
return buf;
}
if (nsec < 0) {
@@ -559,7 +558,7 @@ rel_time_to_str(nstime_t *rel_time)
time = -rel_time->secs;
}
- time_secs_to_str_buf(time, nsec, TRUE, p);
+ time_secs_to_str_buf(time, nsec, TRUE, p, 1+TIME_SECS_LEN+1+6+1);
return buf;
}
@@ -648,6 +647,7 @@ fcwwn_to_str (const guint8 *ad)
/* Generate, into "buf", a string showing the bits of a bitfield.
Return a pointer to the character after that string. */
+/*XXX this needs a buf_len check */
char *
other_decode_bitfield_value(char *buf, guint32 val, guint32 mask, int width)
{
@@ -726,7 +726,7 @@ decode_numeric_bitfield(guint32 val, guint32 mask, int width,
shift++;
p = decode_bitfield_value(buf, val, mask, width);
- sprintf(p, fmt, (val & mask) >> shift);
+ g_snprintf(p, 1025-(p-buf), fmt, (val & mask) >> shift);
return buf;
}
@@ -772,17 +772,17 @@ address_to_str_buf(const address *addr, gchar *buf, int buf_len)
g_snprintf(buf, buf_len, "%02x%02x%02x%02x.%02x%02x%02x%02x%02x%02x", addr->data[0], addr->data[1], addr->data[2], addr->data[3], addr->data[4], addr->data[5], addr->data[6], addr->data[7], addr->data[8], addr->data[9]);
break;
case AT_SNA:
- sna_fid_to_str_buf(addr, buf);
+ sna_fid_to_str_buf(addr, buf, buf_len);
break;
case AT_ATALK:
memcpy(&ddp_addr, addr->data, sizeof ddp_addr);
atalk_addr_to_str_buf(&ddp_addr, buf, buf_len);
break;
case AT_VINES:
- vines_addr_to_str_buf(addr->data, buf);
+ vines_addr_to_str_buf(addr->data, buf, buf_len);
break;
case AT_OSI:
- print_nsap_net_buf(addr->data, addr->len, buf);
+ print_nsap_net_buf(addr->data, addr->len, buf, buf_len);
break;
case AT_ARCNET:
g_snprintf(buf, buf_len, "0x%02X", addr->data[0]);
@@ -814,10 +814,10 @@ gchar* oid_to_str(const guint8 *oid, gint oid_len) {
gchar *buf;
buf=ep_alloc(MAX_OID_STR_LEN);
- return oid_to_str_buf(oid, oid_len, buf);
+ return oid_to_str_buf(oid, oid_len, buf, MAX_OID_STR_LEN);
}
-gchar* oid_to_str_buf(const guint8 *oid, gint oid_len, gchar *buf) {
+gchar* oid_to_str_buf(const guint8 *oid, gint oid_len, gchar *buf, int buf_len) {
gint i;
guint8 byte;
guint32 value;
@@ -827,18 +827,18 @@ gchar* oid_to_str_buf(const guint8 *oid, gint oid_len, gchar *buf) {
for (i=0; i<oid_len; i++){
byte = oid[i];
if ((bufp - buf) > (MAX_OID_STR_LEN - 16)) { /* "4294967295" + ".>>>" + '\0' + 1 */
- bufp += sprintf(bufp, ".>>>");
+ bufp += g_snprintf(bufp, buf_len-(bufp-buf), ".>>>");
break;
}
if (i == 0) {
- bufp += sprintf(bufp, "%u.%u", byte/40, byte%40);
+ bufp += g_snprintf(bufp, buf_len-(bufp-buf), "%u.%u", byte/40, byte%40);
continue;
}
value = (value << 7) | (byte & 0x7F);
if (byte & 0x80) {
continue;
}
- bufp += sprintf(bufp, ".%u", value);
+ bufp += g_snprintf(bufp, buf_len-(bufp-buf), ".%u", value);
value = 0;
}
*bufp = '\0';
@@ -850,11 +850,11 @@ gchar* guid_to_str(const guint8 *guid) {
gchar *buf;
buf=ep_alloc(GUID_STR_LEN);
- return guid_to_str_buf(guid, buf);
+ return guid_to_str_buf(guid, buf, GUID_STR_LEN);
}
-gchar* guid_to_str_buf(const guint8 *guid, gchar *buf) {
- sprintf(buf, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+gchar* guid_to_str_buf(const guint8 *guid, gchar *buf, int buf_len) {
+ g_snprintf(buf, buf_len, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
guid[0], guid[1], guid[2], guid[3],
guid[4], guid[5],
guid[6], guid[7],
diff --git a/epan/to_str.h b/epan/to_str.h
index 3f49ea6178..e34a8242b5 100644
--- a/epan/to_str.h
+++ b/epan/to_str.h
@@ -62,7 +62,7 @@ extern gchar* ipx_addr_to_str(guint32, const guint8 *);
extern gchar* ipxnet_to_string(const guint8 *ad);
extern gchar* ipxnet_to_str_punct(const guint32 ad, char punct);
extern gchar* vines_addr_to_str(const guint8 *addrp);
-extern void vines_addr_to_str_buf(const guint8 *addrp, gchar *buf);
+extern void vines_addr_to_str_buf(const guint8 *addrp, gchar *buf, int buf_len);
extern gchar* time_secs_to_str(gint32);
extern gchar* time_msecs_to_str(gint32);
extern gchar* abs_time_to_str(nstime_t*);
@@ -71,9 +71,9 @@ extern void display_signed_time(gchar *, int, gint32, gint32, time_res_t);
extern gchar* rel_time_to_str(nstime_t*);
extern gchar* rel_time_to_secs_str(nstime_t*);
extern gchar* oid_to_str(const guint8*, gint);
-extern gchar* oid_to_str_buf(const guint8*, gint, gchar*);
+extern gchar* oid_to_str_buf(const guint8*, gint, gchar*, int);
extern gchar* guid_to_str(const guint8*);
-extern gchar* guid_to_str_buf(const guint8*, gchar*);
+extern gchar* guid_to_str_buf(const guint8*, gchar*, int);
extern char *other_decode_bitfield_value(char *buf, guint32 val, guint32 mask,
diff --git a/epan/value_string.c b/epan/value_string.c
index 62dc8d4c80..13fb307d6a 100644
--- a/epan/value_string.c
+++ b/epan/value_string.c
@@ -88,7 +88,7 @@ decode_enumerated_bitfield(guint32 val, guint32 mask, int width,
char *p;
p = decode_bitfield_value(buf, val, mask, width);
- sprintf(p, fmt, val_to_str(val & mask, tab, "Unknown"));
+ g_snprintf(p, 1024-(p-buf), fmt, val_to_str(val & mask, tab, "Unknown"));
return buf;
}
@@ -109,6 +109,6 @@ decode_enumerated_bitfield_shifted(guint32 val, guint32 mask, int width,
shift++;
p = decode_bitfield_value(buf, val, mask, width);
- sprintf(p, fmt, val_to_str((val & mask) >> shift, tab, "Unknown"));
+ g_snprintf(p, 1024-(p-buf), fmt, val_to_str((val & mask) >> shift, tab, "Unknown"));
return buf;
}
diff --git a/epan/xdlc.c b/epan/xdlc.c
index d6fb3148ab..cb3c5af42f 100644
--- a/epan/xdlc.c
+++ b/epan/xdlc.c
@@ -33,6 +33,7 @@
#include <glib.h>
#include <epan/packet.h>
#include <epan/xdlc.h>
+#include <epan/emem.h>
const value_string ftype_vals[] = {
{ XDLC_I, "Information frame" },
@@ -182,11 +183,12 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
const xdlc_cf_items *cf_items;
const char *control_format;
guint16 poll_final;
- char info[80];
+ char *info;
proto_tree *tc, *control_tree;
const gchar *frame_type = NULL;
const gchar *modifier;
+ info=ep_alloc(80);
switch (tvb_get_guint8(tvb, offset) & 0x03) {
case XDLC_S:
@@ -223,7 +225,7 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
if (is_extended) {
poll_final = (control & XDLC_P_F_EXT);
- sprintf(info, "S%s, func=%s, N(R)=%u",
+ g_snprintf(info, 80, "S%s, func=%s, N(R)=%u",
(poll_final ?
(is_response ? " F" : " P") :
""),
@@ -231,7 +233,7 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT);
} else {
poll_final = (control & XDLC_P_F);
- sprintf(info, "S%s, func=%s, N(R)=%u",
+ g_snprintf(info, 80, "S%s, func=%s, N(R)=%u",
(poll_final ?
(is_response ? " F" : " P") :
""),
@@ -292,7 +294,7 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
u_modifier_short_vals_cmd, "Unknown");
}
poll_final = (control & XDLC_P_F);
- sprintf(info, "U%s, func=%s",
+ g_snprintf(info, 80, "U%s, func=%s",
(poll_final ?
(is_response ? " F" : " P") :
""),
@@ -334,7 +336,7 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
cf_items = cf_items_ext;
control_format = "Control field: %s (0x%04X)";
poll_final = (control & XDLC_P_F_EXT);
- sprintf(info, "I%s, N(R)=%u, N(S)=%u",
+ g_snprintf(info, 80, "I%s, N(R)=%u, N(S)=%u",
((control & XDLC_P_F_EXT) ? " P" : ""),
(control & XDLC_N_R_EXT_MASK) >> XDLC_N_R_EXT_SHIFT,
(control & XDLC_N_S_EXT_MASK) >> XDLC_N_S_EXT_SHIFT);
@@ -344,7 +346,7 @@ dissect_xdlc_control(tvbuff_t *tvb, int offset, packet_info *pinfo,
cf_items = cf_items_nonext;
control_format = "Control field: %s (0x%02X)";
poll_final = (control & XDLC_P_F);
- sprintf(info, "I%s, N(R)=%u, N(S)=%u",
+ g_snprintf(info, 80, "I%s, N(R)=%u, N(S)=%u",
((control & XDLC_P_F) ? " P" : ""),
(control & XDLC_N_R_MASK) >> XDLC_N_R_SHIFT,
(control & XDLC_N_S_MASK) >> XDLC_N_S_SHIFT);