X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fregistry.c;h=0f753e8c7de0b6bd58bc225f8c7eb5f7a420e88d;hb=38bd45bb7e08f2072e256afd5bcc21ceb0d97b8e;hp=c4e625231a1c190d0b9514bf2d79f9684b0b579b;hpb=f2e360a90b9520928821928d2fa882ab1da15ba3;p=wimlib diff --git a/src/registry.c b/src/registry.c index c4e62523..0f753e8c 100644 --- a/src/registry.c +++ b/src/registry.c @@ -243,7 +243,7 @@ iterate_subkeys_recursive(const struct regf *regf, le32 subkey_list_offset, unsigned num_offsets; size_t extra_size; unsigned increment; - const le32 *p; + size_t i = 0; enum hive_status status; if (stats->levels_remaining == 0 || stats->subkey_lists_remaining == 0) @@ -270,8 +270,6 @@ iterate_subkeys_recursive(const struct regf *regf, le32 subkey_list_offset, sizeof(struct subkey_list) + extra_size)) return HIVE_CORRUPT; - p = list->elements; - switch (list->base.magic) { case LF_MAGIC: case LH_MAGIC: @@ -283,18 +281,20 @@ iterate_subkeys_recursive(const struct regf *regf, le32 subkey_list_offset, while (num_offsets--) { const struct nk *sub_nk; - sub_nk = get_cell_pointer(regf, *p, sizeof(struct nk)); + sub_nk = get_cell_pointer(regf, list->elements[i], + sizeof(struct nk)); if (!sub_nk || sub_nk->base.magic != NK_MAGIC) return HIVE_CORRUPT; - if (!revalidate_cell(regf, *p, sizeof(struct nk) + + if (!revalidate_cell(regf, list->elements[i], + sizeof(struct nk) + le16_to_cpu(sub_nk->name_size))) return HIVE_CORRUPT; status = (*cb)(sub_nk, cb_ctx); if (status != HIVE_OK) return status; - p += increment; + i += increment; } return HIVE_OK; case RI_MAGIC: @@ -302,8 +302,9 @@ iterate_subkeys_recursive(const struct regf *regf, le32 subkey_list_offset, status = HIVE_OK; stats->levels_remaining--; while (num_offsets--) { - status = iterate_subkeys_recursive(regf, *p++, - cb, cb_ctx, stats); + status = iterate_subkeys_recursive(regf, + list->elements[i++], + cb, cb_ctx, stats); if (status != HIVE_OK) break; } @@ -353,7 +354,7 @@ lookup_subkey_cb(const struct nk *sub_nk, void *_ctx) if (names_equal(ctx->key_name, ctx->key_name_nchars, sub_nk->name, le16_to_cpu(sub_nk->name_size), - (sub_nk->flags & NK_COMPRESSED_NAME))) + (sub_nk->flags & NK_COMPRESSED_NAME) != 0)) { ctx->result = sub_nk; return HIVE_ITERATION_STOPPED; @@ -489,7 +490,7 @@ lookup_value(const struct regf *regf, const tchar *key_name, if (names_equal(value_uname, value_uname_nchars, vk->name, name_size, - (vk->flags & VK_COMPRESSED_NAME))) + (vk->flags & VK_COMPRESSED_NAME) != 0)) { *vk_ret = vk; status = HIVE_OK;