venus: fix memory leak
[openafs.git] / src / venus / fs.c
index ef9d4db..1ef37b1 100644 (file)
@@ -767,17 +767,17 @@ AclToString(struct Acl *acl)
     struct AclEntry *tp;
 
     if (acl->dfs)
-       sprintf(dfsstring, " dfs:%d %s", acl->dfs, acl->cell);
+       snprintf(dfsstring, sizeof(dfsstring), " dfs:%d %s", acl->dfs, acl->cell);
     else
        dfsstring[0] = '\0';
-    sprintf(mydata, "%d%s\n%d\n", acl->nplus, dfsstring, acl->nminus);
+    snprintf(mydata, sizeof(mydata), "%d%s\n%d\n", acl->nplus, dfsstring, acl->nminus);
     for (tp = acl->pluslist; tp; tp = tp->next) {
-       sprintf(tstring, "%s %d\n", tp->name, tp->rights);
-       strcat(mydata, tstring);
+       snprintf(tstring, sizeof(tstring), "%s %d\n", tp->name, tp->rights);
+       strlcat(mydata, tstring, sizeof(mydata));
     }
     for (tp = acl->minuslist; tp; tp = tp->next) {
-       sprintf(tstring, "%s %d\n", tp->name, tp->rights);
-       strcat(mydata, tstring);
+       snprintf(tstring, sizeof(tstring), "%s %d\n", tp->name, tp->rights);
+       strlcat(mydata, tstring, sizeof(mydata));
     }
     return mydata;
 }
@@ -2402,7 +2402,7 @@ ListCellsCmd(struct cmd_syndesc *as, void *arock)
                name = hostutil_GetNameByINet(addr);
            } else {
                addr = ntohl(addr);
-               sprintf(tbuffer, "%d.%d.%d.%d", (addr >> 24) & 0xff,
+               snprintf(tbuffer, sizeof(tbuffer), "%d.%d.%d.%d", (addr >> 24) & 0xff,
                        (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff);
                name = tbuffer;
            }
@@ -3326,6 +3326,9 @@ GetPrefCmd(struct cmd_syndesc *as, void *arock)
            if (code) {
                if ((errno != E2BIG) || (2 * blob.out_size > 0x7FFF)) {
                    perror("getserverprefs pioctl");
+                   if (blob.out != space) {
+                       free(blob.out);
+                   }
                    return 1;
                }
                blob.out_size *= 2;
@@ -3343,7 +3346,7 @@ GetPrefCmd(struct cmd_syndesc *as, void *arock)
                name = hostutil_GetNameByINet(out->servers[i].server.s_addr);
            } else {
                addr = ntohl(out->servers[i].server.s_addr);
-               sprintf(tbuffer, "%d.%d.%d.%d", (addr >> 24) & 0xff,
+               snprintf(tbuffer, sizeof(tbuffer), "%d.%d.%d.%d", (addr >> 24) & 0xff,
                        (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff);
                name = tbuffer;
            }
@@ -4054,9 +4057,9 @@ GetClientAddrsCmd(struct cmd_syndesc *as, void *arock)
            out = (struct sprefinfo *)blob.out;
            for (i = 0; i < out->num_servers; i++) {
                afs_int32 addr;
-               char tbuffer[32];
+               char tbuffer[20];
                addr = ntohl(out->servers[i].server.s_addr);
-               sprintf(tbuffer, "%d.%d.%d.%d", (addr >> 24) & 0xff,
+               snprintf(tbuffer, sizeof(tbuffer), "%d.%d.%d.%d", (addr >> 24) & 0xff,
                        (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff);
                printf("%-50s\n", tbuffer);
            }