Browse Source

fix memory leak on failure in realpath

Rich Felker 14 năm trước cách đây
mục cha
commit
d43ff110bc
1 tập tin đã thay đổi với 4 bổ sung4 xóa
  1. 4 4
      src/misc/realpath.c

+ 4 - 4
src/misc/realpath.c

@@ -19,16 +19,16 @@ char *realpath(const char *filename, char *resolved)
 		return 0;
 	}
 
+	fd = open(filename, O_RDONLY|O_NONBLOCK);
+	if (fd < 0) return 0;
+	snprintf(buf, sizeof buf, "/proc/self/fd/%d", fd);
+
 	if (!resolved) {
 		alloc = 1;
 		resolved = malloc(PATH_MAX);
 		if (!resolved) return 0;
 	}
 
-	fd = open(filename, O_RDONLY|O_NONBLOCK);
-	if (fd < 0) return 0;
-	snprintf(buf, sizeof buf, "/proc/self/fd/%d", fd);
-
 	r = readlink(buf, resolved, PATH_MAX-1);
 	if (r < 0) goto err;
 	resolved[r] = 0;