Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: libq/
Date: Fri, 29 Nov 2019 13:22:15
Message-Id: 1575033517.50b70d7c6696903440adde3a945af8bf298e1a0b.grobian@gentoo
1 commit: 50b70d7c6696903440adde3a945af8bf298e1a0b
2 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
3 AuthorDate: Fri Nov 29 13:18:37 2019 +0000
4 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
5 CommitDate: Fri Nov 29 13:18:37 2019 +0000
6 URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=50b70d7c
7
8 libq/tree: fix crash in tree_close_meta, bug #701470
9
10 _data member was used differently before, make sure we can free it
11
12 Bug: https://bugs.gentoo.org/701470
13 Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>
14
15 libq/tree.c | 19 +++++++------------
16 1 file changed, 7 insertions(+), 12 deletions(-)
17
18 diff --git a/libq/tree.c b/libq/tree.c
19 index a383950..cc8cf3e 100644
20 --- a/libq/tree.c
21 +++ b/libq/tree.c
22 @@ -550,12 +550,11 @@ tree_read_file_pms(tree_pkg_ctx *pkg_ctx)
23
24 len = sizeof(*ret) + s.st_size + 1;
25 ret = xzalloc(len);
26 - ptr = (char*)ret;
27 - ret->_data = ptr + sizeof(*ret);
28 - if ((off_t)fread(ret->_data, 1, s.st_size, f) != s.st_size)
29 + ptr = (char*)ret + sizeof(*ret);
30 + if ((off_t)fread(ptr, 1, s.st_size, f) != s.st_size)
31 goto err;
32
33 - ret->DEPEND = ret->_data;
34 + ret->DEPEND = ptr;
35 #define next_line(curr, next) \
36 if ((ptr = strchr(ret->curr, '\n')) == NULL) { \
37 warn("Invalid cache file for '%s'", buf); \
38 @@ -618,9 +617,8 @@ tree_read_file_md5(tree_pkg_ctx *pkg_ctx)
39
40 len = sizeof(*ret) + s.st_size + 1;
41 ret = xzalloc(len);
42 - ptr = (char*)ret;
43 - ret->_data = ptr + sizeof(*ret);
44 - if ((off_t)fread(ret->_data, 1, s.st_size, f) != s.st_size)
45 + ptr = (char*)ret + sizeof(*ret);
46 + if ((off_t)fread(ptr, 1, s.st_size, f) != s.st_size)
47 goto err;
48
49 /* We have a block of key=value\n data.
50 @@ -638,7 +636,6 @@ tree_read_file_md5(tree_pkg_ctx *pkg_ctx)
51 #define assign_var(keyname) \
52 assign_var_cmp(keyname, #keyname);
53
54 - ptr = ret->_data;
55 endptr = strchr(ptr, '\0');
56 if (endptr == NULL) {
57 warn("Invalid cache file for '%s/%s': "
58 @@ -731,12 +728,10 @@ tree_read_file_ebuild(tree_pkg_ctx *pkg_ctx)
59
60 len = sizeof(*ret) + s.st_size + 1;
61 ret = xzalloc(len);
62 - p = (char *)ret;
63 - ret->_data = p + sizeof(*ret);
64 - if ((off_t)fread(ret->_data, 1, s.st_size, f) != s.st_size)
65 + p = (char *)ret + sizeof(*ret);
66 + if ((off_t)fread(p, 1, s.st_size, f) != s.st_size)
67 goto err;
68
69 - p = ret->_data;
70 do {
71 q = p;
72 while (*p >= 'A' && *p <= 'Z')