1 |
commit: 7ae4aa5619cc7e7067ea6ee24a4d49fa5b4a72fd |
2 |
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Nov 21 00:08:37 2011 +0000 |
4 |
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Nov 21 00:11:56 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/net-tools.git;a=commit;h=7ae4aa56 |
7 |
|
8 |
get_sname: avoid buffer overflows if proto name is too long |
9 |
|
10 |
Signed-off-by: Mike Frysinger <vapier <AT> gentoo.org> |
11 |
|
12 |
--- |
13 |
lib/inet.c | 21 +++++++++++---------- |
14 |
1 files changed, 11 insertions(+), 10 deletions(-) |
15 |
|
16 |
diff --git a/lib/inet.c b/lib/inet.c |
17 |
index 073c8a3..60e55df 100644 |
18 |
--- a/lib/inet.c |
19 |
+++ b/lib/inet.c |
20 |
@@ -431,16 +431,17 @@ const char *get_sname(int socknumber, const char *proto, int numeric) |
21 |
init = 1; |
22 |
} |
23 |
buffer[0] = '\0'; |
24 |
- if (!strcmp(proto, "tcp")) { |
25 |
- if ((item = searchlist(tcp_name, socknumber)) != NULL) |
26 |
- sprintf(buffer, "%s", item->name); |
27 |
- } else if (!strcmp(proto, "udp")) { |
28 |
- if ((item = searchlist(udp_name, socknumber)) != NULL) |
29 |
- sprintf(buffer, "%s", item->name); |
30 |
- } else if (!strcmp(proto, "raw")) { |
31 |
- if ((item = searchlist(raw_name, socknumber)) != NULL) |
32 |
- sprintf(buffer, "%s", item->name); |
33 |
- |
34 |
+ if (!strcmp(proto, "tcp")) |
35 |
+ item = searchlist(tcp_name, socknumber); |
36 |
+ else if (!strcmp(proto, "udp")) |
37 |
+ item = searchlist(udp_name, socknumber); |
38 |
+ else if (!strcmp(proto, "raw")) |
39 |
+ item = searchlist(raw_name, socknumber); |
40 |
+ else |
41 |
+ item = NULL; |
42 |
+ if (item) { |
43 |
+ strncpy(buffer, item->name, sizeof(buffer)); |
44 |
+ buffer[sizeof(buffer) - 1] = '\0'; |
45 |
} |
46 |
|
47 |
if (!buffer[0]) { |