diff options
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-support/libtar/files/0011-libtar-fix-programming-mistakes-detected-by-static-a.patch')
-rw-r--r-- | meta-openembedded/meta-oe/recipes-support/libtar/files/0011-libtar-fix-programming-mistakes-detected-by-static-a.patch | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/meta-openembedded/meta-oe/recipes-support/libtar/files/0011-libtar-fix-programming-mistakes-detected-by-static-a.patch b/meta-openembedded/meta-oe/recipes-support/libtar/files/0011-libtar-fix-programming-mistakes-detected-by-static-a.patch new file mode 100644 index 0000000000..7b39df4254 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-support/libtar/files/0011-libtar-fix-programming-mistakes-detected-by-static-a.patch @@ -0,0 +1,100 @@ +From b469d621c0143e652c51bb238fd2060135aa2009 Mon Sep 17 00:00:00 2001 +From: Kamil Dudka <kdudka@redhat.com> +Date: Tue, 6 Nov 2018 17:24:05 +0100 +Subject: [PATCH] libtar: fix programming mistakes detected by static analysis + +Authored by Kamil Dudka <kdudka@redhat.com>. + +meta-openembedded uses Debian's release tarball [1]. Debian uses +repo.or.cz/libtar.git as their upstream [2]. repo.or.cz/libtar.git has +been inactive since 2013 [3]. + +Upstream-Status: Inactive-Upstream [lastrelease: 2013 lastcommit: 2013] + +[1] https://git.openembedded.org/meta-openembedded/tree/meta-oe/recipes-support/libtar/libtar_1.2.20.bb?h=master#n8 +[2] http://svn.kibibyte.se/libtar/trunk/debian/control (rev 51; not tagged) +[3] https://repo.or.cz/libtar.git/shortlog/refs/heads/master + +Signed-off-by: Katariina Lounento <katariina.lounento@vaisala.com> +--- + lib/append.c | 7 +++++++ + lib/wrapper.c | 11 +++++++---- + libtar/libtar.c | 1 + + 3 files changed, 15 insertions(+), 4 deletions(-) + +diff --git a/lib/append.c b/lib/append.c +index ff58532..6386a50 100644 +--- a/lib/append.c ++++ b/lib/append.c +@@ -110,9 +110,16 @@ tar_append_file(TAR *t, const char *realname, const char *savename) + td->td_dev = s.st_dev; + td->td_h = libtar_hash_new(256, (libtar_hashfunc_t)ino_hash); + if (td->td_h == NULL) ++ { ++ free(td); + return -1; ++ } + if (libtar_hash_add(t->h, td) == -1) ++ { ++ libtar_hash_free(td->td_h, free); ++ free(td); + return -1; ++ } + } + libtar_hashptr_reset(&hp); + if (libtar_hash_getkey(td->td_h, &hp, &(s.st_ino), +diff --git a/lib/wrapper.c b/lib/wrapper.c +index 44cc435..2d3f5b9 100644 +--- a/lib/wrapper.c ++++ b/lib/wrapper.c +@@ -97,6 +97,7 @@ tar_append_tree(TAR *t, char *realdir, char *savedir) + struct dirent *dent; + DIR *dp; + struct stat s; ++ int ret = -1; + + #ifdef DEBUG + printf("==> tar_append_tree(0x%lx, \"%s\", \"%s\")\n", +@@ -130,24 +131,26 @@ tar_append_tree(TAR *t, char *realdir, char *savedir) + dent->d_name); + + if (lstat(realpath, &s) != 0) +- return -1; ++ goto fail; + + if (S_ISDIR(s.st_mode)) + { + if (tar_append_tree(t, realpath, + (savedir ? savepath : NULL)) != 0) +- return -1; ++ goto fail; + continue; + } + + if (tar_append_file(t, realpath, + (savedir ? savepath : NULL)) != 0) +- return -1; ++ goto fail; + } + ++ ret = 0; ++fail: + closedir(dp); + +- return 0; ++ return ret; + } + + +diff --git a/libtar/libtar.c b/libtar/libtar.c +index 23f8741..ac339e7 100644 +--- a/libtar/libtar.c ++++ b/libtar/libtar.c +@@ -92,6 +92,7 @@ gzopen_frontend(char *pathname, int oflags, int mode) + if (!gzf) + { + errno = ENOMEM; ++ close(fd); + return -1; + } + |