summaryrefslogtreecommitdiffstats
path: root/meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch')
-rw-r--r--meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch119
1 files changed, 119 insertions, 0 deletions
diff --git a/meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch b/meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch
new file mode 100644
index 0000000000..f88bcbf9cf
--- /dev/null
+++ b/meta-oe/recipes-support/libtar/files/0007-fix-memleaks-in-libtar-sample-program.patch
@@ -0,0 +1,119 @@
1From e3888e452aee72e0d658185ac20e8e63bed1aff8 Mon Sep 17 00:00:00 2001
2From: Huzaifa Sidhpurwala <huzaifas@fedoraproject.org>
3Date: Tue, 15 Oct 2013 20:05:04 -0400
4Subject: [PATCH] fix memleaks in libtar sample program
5
6Authored by Huzaifa Sidhpurwala <huzaifas@fedoraproject.org>.
7
8Upstream-Status: Backport [https://repo.or.cz/libtar.git/commit/f3c711cf3054ff366a1a3500cdc8c64ecc2d2da6]
9
10Signed-off-by: Katariina Lounento <katariina.lounento@vaisala.com>
11---
12 libtar/libtar.c | 29 ++++++++++++++++++-----------
13 1 file changed, 18 insertions(+), 11 deletions(-)
14
15diff --git a/libtar/libtar.c b/libtar/libtar.c
16index bb5644c..23f8741 100644
17--- a/libtar/libtar.c
18+++ b/libtar/libtar.c
19@@ -253,6 +253,7 @@ extract(char *tarfile, char *rootdir)
20 if (tar_extract_all(t, rootdir) != 0)
21 {
22 fprintf(stderr, "tar_extract_all(): %s\n", strerror(errno));
23+ tar_close(t);
24 return -1;
25 }
26
27@@ -270,12 +271,13 @@ extract(char *tarfile, char *rootdir)
28
29
30 void
31-usage()
32+usage(void *rootdir)
33 {
34 printf("Usage: %s [-C rootdir] [-g] [-z] -x|-t filename.tar\n",
35 progname);
36 printf(" %s [-C rootdir] [-g] [-z] -c filename.tar ...\n",
37 progname);
38+ free(rootdir);
39 exit(-1);
40 }
41
42@@ -292,6 +294,7 @@ main(int argc, char *argv[])
43 int c;
44 int mode = 0;
45 libtar_list_t *l;
46+ int return_code = -2;
47
48 progname = basename(argv[0]);
49
50@@ -313,17 +316,17 @@ main(int argc, char *argv[])
51 break;
52 case 'c':
53 if (mode)
54- usage();
55+ usage(rootdir);
56 mode = MODE_CREATE;
57 break;
58 case 'x':
59 if (mode)
60- usage();
61+ usage(rootdir);
62 mode = MODE_EXTRACT;
63 break;
64 case 't':
65 if (mode)
66- usage();
67+ usage(rootdir);
68 mode = MODE_LIST;
69 break;
70 #ifdef HAVE_LIBZ
71@@ -332,7 +335,7 @@ main(int argc, char *argv[])
72 break;
73 #endif /* HAVE_LIBZ */
74 default:
75- usage();
76+ usage(rootdir);
77 }
78
79 if (!mode || ((argc - optind) < (mode == MODE_CREATE ? 2 : 1)))
80@@ -341,7 +344,7 @@ main(int argc, char *argv[])
81 printf("argc - optind == %d\tmode == %d\n", argc - optind,
82 mode);
83 #endif
84- usage();
85+ usage(rootdir);
86 }
87
88 #ifdef DEBUG
89@@ -351,21 +354,25 @@ main(int argc, char *argv[])
90 switch (mode)
91 {
92 case MODE_EXTRACT:
93- return extract(argv[optind], rootdir);
94+ return_code = extract(argv[optind], rootdir);
95+ break;
96 case MODE_CREATE:
97 tarfile = argv[optind];
98 l = libtar_list_new(LIST_QUEUE, NULL);
99 for (c = optind + 1; c < argc; c++)
100 libtar_list_add(l, argv[c]);
101- return create(tarfile, rootdir, l);
102+ return_code = create(tarfile, rootdir, l);
103+ libtar_list_free(l, NULL);
104+ break;
105 case MODE_LIST:
106- return list(argv[optind]);
107+ return_code = list(argv[optind]);
108+ break;
109 default:
110 break;
111 }
112
113- /* NOTREACHED */
114- return -2;
115+ free(rootdir);
116+ return return_code;
117 }
118
119