Patrick Williams | d8c66bc | 2016-06-20 12:57:21 -0500 | [diff] [blame] | 1 | From 3e562bed7dced25eb3e9174ca9395324b6c873c1 Mon Sep 17 00:00:00 2001 |
| 2 | From: Alejandro del Castillo <alejandro.delcastillo@ni.com> |
| 3 | Date: Wed, 9 Dec 2015 13:36:14 -0600 |
| 4 | Subject: [PATCH] libsolv_solver_set_arch_policy: use correct logic during |
| 5 | archs resizing |
| 6 | |
| 7 | If there are more than INITIAL_ARCH_LIST_SIZE archs defined in the |
| 8 | configuration, libsolv_solver_set_arch_policy crashes due to flawed |
| 9 | logic when resizing the archs array. |
| 10 | |
| 11 | Signed-off-by: Alejandro del Castillo <alejandro.delcastillo@ni.com> |
| 12 | --- |
| 13 | libopkg/opkg_solver_libsolv.c | 6 ++++-- |
| 14 | 1 file changed, 4 insertions(+), 2 deletions(-) |
| 15 | |
| 16 | diff --git a/libopkg/opkg_solver_libsolv.c b/libopkg/opkg_solver_libsolv.c |
| 17 | index 1cdcf1f..b5af0fa 100644 |
| 18 | --- a/libopkg/opkg_solver_libsolv.c |
| 19 | +++ b/libopkg/opkg_solver_libsolv.c |
| 20 | @@ -66,8 +66,10 @@ static void libsolv_solver_set_arch_policy(libsolv_solver_t *libsolv_solver) |
| 21 | nv_pair_list_elt_t *arch_info; |
| 22 | |
| 23 | list_for_each_entry(arch_info, &opkg_config->arch_list.head, node) { |
| 24 | - if (arch_count > arch_list_size) |
| 25 | - archs = xrealloc(archs, arch_list_size *= 2); |
| 26 | + if (arch_count >= arch_list_size) { |
| 27 | + arch_list_size *= 2; |
| 28 | + archs = xrealloc(archs, arch_list_size * sizeof(arch_data_t)); |
| 29 | + } |
| 30 | |
| 31 | archs[arch_count].arch = ((nv_pair_t *)(arch_info->data))->name; |
| 32 | archs[arch_count].priority = atoi(((nv_pair_t *) |
| 33 | -- |
| 34 | 1.9.1 |
| 35 | |