Unified · Split
| @@ -260,12 +260,16 @@ newfid(C9fid fid, char *path, char **err) · 259 unmodified lines | ||
| 260 | 260 | if (statpath(path, &st, err) != 0) |
| 261 | 261 | return NULL; |
| 262 | 262 | |
| 263 | − if ((f = calloc(1, sizeof(*f))) == NULL) { | |
| 263 | + if ((f = calloc(1, sizeof(*f))) == NULL || (f->path = strdup(path)) == NULL) { | |
| 264 | +nomem: | |
| 265 | + if (f != NULL) { | |
| 266 | + free(f->path); | |
| 267 | + free(f); | |
| 268 | + } | |
| 264 | 269 | *err = Enomem; |
| 265 | 270 | return NULL; |
| 266 | 271 | } |
| 267 | 272 | f->fd = -1; |
| 268 | − f->path = strdup(path); | |
| 269 | 273 | f->name = strrchr(f->path, '/'); |
| 270 | 274 | if (f->name == NULL) |
| 271 | 275 | f->name = f->path; |
| @@ -281,10 +285,8 @@ newfid(C9fid fid, char *path, char **err) · 9 unmodified lines | ||
| 281 | 285 | } |
| 282 | 286 | } |
| 283 | 287 | if (i >= numfids) { |
| 284 | − if ((newfids = realloc(fids, (numfids+1)*sizeof(*fids))) == NULL) { | |
| 285 | − *err = Enomem; | |
| 286 | − return NULL; | |
| 287 | − } | |
| 288 | + if ((newfids = realloc(fids, (numfids+1)*sizeof(*fids))) == NULL) | |
| 289 | + goto nomem; | |
| 288 | 290 | fids = newfids; |
| 289 | 291 | fids[numfids++] = f; |
| 290 | 292 | } |
| @@ -393,9 +395,10 @@ walk(C9fid fid, C9fid nfid, char *el[], C9qid *qids[], char **err) · 102 unmodified lines | ||
| 393 | 395 | path[plen+1+ellen] = 0; |
| 394 | 396 | |
| 395 | 397 | if (!rootescape) { |
| 396 | − if ((real = realpath(path, NULL)) == NULL) | |
| 397 | − break; | |
| 398 | + real = realpath(path, NULL); | |
| 398 | 399 | free(path); |
| 400 | + if (real == NULL) | |
| 401 | + break; | |
| 399 | 402 | if (strlen(real) < rootlen) { /* don't escape root */ |
| 400 | 403 | free(real); |
| 401 | 404 | real = strdup(rootpath); |