]> granicus.if.org Git - strace/commitdiff
2007-10-01 Dmitry V. Levin <ldv@altlinux.org>
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 8 Oct 2007 23:31:19 +0000 (23:31 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 8 Oct 2007 23:31:19 +0000 (23:31 +0000)
* net.c (printsock): Output AF_UNIX socket address using
printpathn() to avoid unprintable characters in output.
Suggested by Neil Campbell.

ChangeLog
net.c

index 3a00e3be28af5b570547337f215c4c29e67bbab0..67238f99cc8abff84b869d26ebeb20dcf0ed9454 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-10-01  Dmitry V. Levin <ldv@altlinux.org>
+
+       * net.c (printsock): Output AF_UNIX socket address using
+       printpathn() to avoid unprintable characters in output.
+       Suggested by Neil Campbell.
+
 2007-10-01  Dmitry V. Levin <ldv@altlinux.org>
 
        * util.c (string_quote): Move quoting code from ...
diff --git a/net.c b/net.c
index 0085acbea669cfe20a11e0b4eff814d243211111..9fff3e6c526b206e3551ff43bfe52181eb1003a3 100644 (file)
--- a/net.c
+++ b/net.c
@@ -937,10 +937,7 @@ static const struct xlat af_packet_types[] = {
 
 
 void
-printsock(tcp, addr, addrlen)
-struct tcb *tcp;
-long addr;
-int addrlen;
+printsock(struct tcb *tcp, long addr, int addrlen)
 {
        union {
                char pad[128];
@@ -970,13 +967,16 @@ int addrlen;
                tprintf("%#lx", addr);
                return;
        }
-       if ((addrlen<2) || (addrlen>sizeof(addrbuf)))
-               addrlen=sizeof(addrbuf);
 
-       if (umoven(tcp, addr, addrlen, (char*)&addrbuf) < 0) {
+       if (addrlen < 2 || addrlen > sizeof(addrbuf))
+               addrlen = sizeof(addrbuf);
+
+       memset(&addrbuf, 0, sizeof(addrbuf));
+       if (umoven(tcp, addr, addrlen, addrbuf.pad) < 0) {
                tprintf("{...}");
                return;
        }
+       addrbuf.pad[sizeof(addrbuf.pad) - 1] = '\0';
 
        tprintf("{sa_family=");
        printxval(addrfams, addrbuf.sa.sa_family, "AF_???");
@@ -984,12 +984,14 @@ int addrlen;
 
        switch (addrbuf.sa.sa_family) {
        case AF_UNIX:
-               if (addrlen==2) {
-                       tprintf("<nil>");
+               if (addrlen == 2) {
+                       tprintf("NULL");
                } else if (addrbuf.sau.sun_path[0]) {
-                       tprintf("path=\"%-.*s\"", addrlen-2, addrbuf.sau.sun_path);
+                       tprintf("path=");
+                       printstr(tcp, addr + 2, strlen(addrbuf.sau.sun_path));
                } else {
-                       tprintf("path=@%-.*s", addrlen-3, addrbuf.sau.sun_path+1);
+                       tprintf("path=@");
+                       printstr(tcp, addr + 3, strlen(addrbuf.sau.sun_path + 1));
                }
                break;
        case AF_INET: