X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=src%2Fmount.c;h=9385b5298975f41bf6b60d797cd92ac36a7338b7;hp=6bdd0c459e183f6607c79f3444add204cedf130f;hb=68b023ab834029db11ce9bf150dadd9c80e59404;hpb=075e1470621233971f5785ce12e5106f3c0f4d42;ds=sidebyside diff --git a/src/mount.c b/src/mount.c index 6bdd0c45..9385b529 100644 --- a/src/mount.c +++ b/src/mount.c @@ -221,7 +221,7 @@ int dentry_to_stbuf(const struct dentry *dentry, struct stat *stbuf) stbuf->st_gid = getgid(); /* Use the size of the unnamed (default) file stream. */ - lte = dentry_first_lte_resolved(dentry); + lte = dentry_unnamed_lte_resolved(dentry); if (lte) { if (lte->resource_location == RESOURCE_IN_STAGING_FILE) { wimlib_assert(lte->staging_file_name); @@ -1009,7 +1009,7 @@ static int wimfs_getxattr(const char *path, const char *name, char *value, 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; @@ -1414,7 +1414,7 @@ static int wimfs_removexattr(const char *path, const char *name) 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; @@ -1531,6 +1531,10 @@ static int wimfs_setxattr(const char *path, const char *name, 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; @@ -1564,6 +1568,7 @@ static int wimfs_setxattr(const char *path, const char *name, 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; @@ -1824,7 +1829,7 @@ WIMLIBAPI int wimlib_mount(WIMStruct *wim, int image, const char *dir, DEBUG("Selected image %d", image); - next_link_group_id = assign_link_groups(wim->image_metadata[image - 1].lgt); + next_link_group_id = assign_link_group_ids(wim->image_metadata[image - 1].lgt); /* Resolve all the lookup table entries of the dentry tree */ for_dentry_in_tree(wim_root_dentry(wim), dentry_resolve_ltes,