From: osdl.net!shemminger Date: Mon, 7 Feb 2005 18:15:04 +0000 (+0000) Subject: fix potential memory corruption X-Git-Tag: v2_6_10-050207~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fb9b1d0f6a9f355bceae435ea43f1c8f3635b2df;p=thirdparty%2Fiproute2.git fix potential memory corruption (Logical change 1.136) --- diff --git a/ChangeLog b/ChangeLog index b8bb1cf37..68efd8000 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-02-07 Jean-Marc Ranger + + * need to call getline() with null for first usage + * don't overwrite const arg + 2005-02-07 Stephen Hemminger * Add experimental distribution diff --git a/include/utils.h b/include/utils.h index ed1257e56..8466803f8 100644 --- a/include/utils.h +++ b/include/utils.h @@ -66,9 +66,9 @@ struct ipx_addr { extern __u32 get_addr32(const char *name); extern int get_addr_1(inet_prefix *dst, const char *arg, int family); -extern int get_prefix_1(inet_prefix *dst, const char *arg, int family); +extern int get_prefix_1(inet_prefix *dst, char *arg, int family); extern int get_addr(inet_prefix *dst, const char *arg, int family); -extern int get_prefix(inet_prefix *dst, const char *arg, int family); +extern int get_prefix(inet_prefix *dst, char *arg, int family); extern int get_integer(int *val, const char *arg, int base); extern int get_unsigned(unsigned *val, const char *arg, int base); diff --git a/lib/utils.c b/lib/utils.c index 739383a69..cd9567bfd 100644 --- a/lib/utils.c +++ b/lib/utils.c @@ -200,7 +200,7 @@ int get_addr_1(inet_prefix *addr, const char *name, int family) return 0; } -int get_prefix_1(inet_prefix *dst, const char *arg, int family) +int get_prefix_1(inet_prefix *dst, char *arg, int family) { int err; unsigned plen; @@ -222,6 +222,7 @@ int get_prefix_1(inet_prefix *dst, const char *arg, int family) slash = strchr(arg, '/'); if (slash) *slash = 0; + err = get_addr_1(dst, arg, family); if (err == 0) { switch(dst->family) { @@ -262,7 +263,7 @@ int get_addr(inet_prefix *dst, const char *arg, int family) return 0; } -int get_prefix(inet_prefix *dst, const char *arg, int family) +int get_prefix(inet_prefix *dst, char *arg, int family) { if (family == AF_PACKET) { fprintf(stderr, "Error: \"%s\" may be inet prefix, but it is not allowed in this context.\n", arg); diff --git a/tc/q_netem.c b/tc/q_netem.c index 5a591ed47..60369dc6b 100644 --- a/tc/q_netem.c +++ b/tc/q_netem.c @@ -56,7 +56,7 @@ static int get_distribution(const char *type, __s16 *data) int n; long x; size_t len; - char *line; + char *line = NULL; char name[128]; snprintf(name, sizeof(name), "/usr/lib/tc/%s.dist", type);