X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fsecurity.c;h=f4dfb8e8555fa5916af2d3de40e037773cebdae7;hb=c6aa9e6bfdeee0e08407d0efe02270f2ba4b62c6;hp=7efc542b1e1de80a58dde1b8cf688cc170798782;hpb=650997e4865a090b6856c7ca34b02f42994e8e29;p=wimlib diff --git a/src/security.c b/src/security.c index 7efc542b..f4dfb8e8 100644 --- a/src/security.c +++ b/src/security.c @@ -186,7 +186,6 @@ read_security_data(const u8 metadata_resource[], u64 metadata_resource_len, } sd->sizes = NULL; sd->descriptors = NULL; - sd->refcnt = 1; p = metadata_resource; p = get_u32(p, &sd->total_length); @@ -375,7 +374,7 @@ print_sid(const void *p, const tchar *type) tprintf(T(" Subauthority count = %u\n"), sid->sub_authority_count); tprintf(T(" Identifier authority = ")); print_byte_field(sid->identifier_authority, - sizeof(sid->identifier_authority)); + sizeof(sid->identifier_authority), stdout); tputchar(T('\n')); for (u8 i = 0; i < sid->sub_authority_count; i++) { tprintf(T(" Subauthority %u = %u\n"), @@ -437,17 +436,14 @@ void free_security_data(struct wim_security_data *sd) { if (sd) { - wimlib_assert(sd->refcnt != 0); - if (--sd->refcnt == 0) { - u8 **descriptors = sd->descriptors; - u32 num_entries = sd->num_entries; - if (descriptors) - while (num_entries--) - FREE(*descriptors++); - FREE(sd->sizes); - FREE(sd->descriptors); - FREE(sd); - } + u8 **descriptors = sd->descriptors; + u32 num_entries = sd->num_entries; + if (descriptors) + while (num_entries--) + FREE(*descriptors++); + FREE(sd->sizes); + FREE(sd->descriptors); + FREE(sd); } } @@ -556,6 +552,9 @@ sd_set_add_sd(struct sd_set *sd_set, const char descriptor[], size_t size) new->security_id = sd->num_entries; copy_hash(new->hash, hash); + /* There typically are only a few dozen security descriptors in a + * directory tree, so expanding the array of security descriptors by + * only 1 extra space each time should not be a problem. */ descriptors = REALLOC(sd->descriptors, (sd->num_entries + 1) * sizeof(sd->descriptors[0])); if (!descriptors)