for (unsigned i = 0; i <= dentry->num_ads; i++) {
const u8 *hash;
hash = dentry_stream_hash_unresolved(dentry, i);
- if (dentry_stream_name_len(dentry, i) && !is_zero_hash(hash)) {
+ if (!dentry_stream_name_len(dentry, i) && !is_zero_hash(hash)) {
num_unnamed_streams++;
unnamed_stream_idx = i;
}
return dentry->ads_entries[stream_idx - 1].hash;
}
-static inline unsigned dentry_stream_name_len(const struct dentry *dentry,
- unsigned stream_idx)
+static inline u16 dentry_stream_name_len(const struct dentry *dentry,
+ unsigned stream_idx)
{
wimlib_assert(stream_idx <= dentry->num_ads);
if (stream_idx == 0)
if (!(mount_flags & WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_XATTR))
return -ENOTSUP;
- if (memcmp(name, "user.", 5) != 0)
+ if (strlen(name) < 5 || memcmp(name, "user.", 5) != 0)
return -ENOATTR;
name += 5;
if (!(mount_flags & WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_XATTR))
return -ENOTSUP;
- if (memcmp(name, "user.", 5) != 0)
+ if (strlen(name) < 5 || memcmp(name, "user.", 5) != 0)
return -ENOATTR;
name += 5;
if (!(mount_flags & WIMLIB_MOUNT_FLAG_STREAM_INTERFACE_XATTR))
return -ENOTSUP;
+ if (strlen(name) < 5 || memcmp(name, "user.", 5) != 0)
+ return -ENOATTR;
+ name += 5;
+
dentry = get_dentry(w, path);
if (!dentry)
return -ENOENT;
FREE(lte);
return -ENOMEM;
}
+ memcpy(value_copy, value, size);
lte->resource_location = RESOURCE_IN_ATTACHED_BUFFER;
lte->attached_buffer = value_copy;
lte->resource_entry.original_size = size;