From: Karel Zak Date: Fri, 11 Jun 2021 13:43:36 +0000 (+0200) Subject: lib/path: fix possible leak when use ul_path_read_string() [coverity scan] X-Git-Tag: v2.38-rc1~462 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1e881378d6674abaae5a929f7deff39bb3405c3b;p=thirdparty%2Futil-linux.git lib/path: fix possible leak when use ul_path_read_string() [coverity scan] Signed-off-by: Karel Zak --- diff --git a/lib/path.c b/lib/path.c index 75fa853058..058c143f40 100644 --- a/lib/path.c +++ b/lib/path.c @@ -617,7 +617,7 @@ int ul_path_readf(struct path_cxt *pc, char *buf, size_t len, const char *path, * Returns newly allocated buffer with data from file. Maximal size is BUFSIZ * (send patch if you need something bigger;-) * - * Returns size of the string! + * Returns size of the string without \0, nothing is allocated if returns <= 0. */ int ul_path_read_string(struct path_cxt *pc, char **str, const char *path) { @@ -635,6 +635,8 @@ int ul_path_read_string(struct path_cxt *pc, char **str, const char *path) /* Remove tailing newline (usual in sysfs) */ if (rc > 0 && *(buf + rc - 1) == '\n') --rc; + if (rc == 0) + return 0; buf[rc] = '\0'; *str = strdup(buf); @@ -1191,11 +1193,11 @@ int main(int argc, char *argv[]) errx(EXIT_FAILURE, " not defined"); file = argv[optind++]; - if (ul_path_read_string(pc, &res, file) < 0) + if (ul_path_read_string(pc, &res, file) <= 0) err(EXIT_FAILURE, "read string failed"); printf("read: %s: %s\n", file, res); - if (ul_path_readf_string(pc, &res, "%s", file) < 0) + if (ul_path_readf_string(pc, &res, "%s", file) <= 0) err(EXIT_FAILURE, "readf string failed"); printf("readf: %s: %s\n", file, res);