From: Colin Walters Date: Thu, 28 Sep 2017 19:41:02 +0000 (-0400) Subject: libarchive: Fix assertion error if used with CANONICAL_PERMISSIONS X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~31^2~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a7f04a14b584b04389576d3f10fad79b40f466d8;p=ostree.git libarchive: Fix assertion error if used with CANONICAL_PERMISSIONS I was trying to do a change for rpm-ostree to use `OSTREE_REPO_COMMIT_MODIFIER_FLAGS_CANONICAL_PERMISSIONS` for container builds with `bare-user-only,` but hit an assertion here ultimtely because we weren't setting `standard::type`. Rather than hand-rolling `GFileInfo` creation, use the stat buffer conversion code which is more robust and used in multiple places already. Closes: #1227 Approved by: jlebon --- diff --git a/src/libostree/ostree-repo-libarchive.c b/src/libostree/ostree-repo-libarchive.c index 414981df..64d8a503 100644 --- a/src/libostree/ostree-repo-libarchive.c +++ b/src/libostree/ostree-repo-libarchive.c @@ -871,10 +871,14 @@ ostree_repo_import_archive_to_mtree (OstreeRepo *self, if (opts->autocreate_parents && ostree_mutable_tree_get_metadata_checksum (mtree) == NULL) { - glnx_unref_object GFileInfo *fi = g_file_info_new (); - g_file_info_set_attribute_uint32 (fi, "unix::uid", 0); - g_file_info_set_attribute_uint32 (fi, "unix::gid", 0); - g_file_info_set_attribute_uint32 (fi, "unix::mode", DEFAULT_DIRMODE); + /* _ostree_stbuf_to_gfileinfo() only looks at these fields, + * but we use it to ensure it sets all of the relevant GFileInfo + * properties. + */ + struct stat stbuf = { .st_mode = DEFAULT_DIRMODE, + .st_uid = 0, + .st_gid = 0 }; + g_autoptr(GFileInfo) fi = _ostree_stbuf_to_gfileinfo (&stbuf); g_autoptr(GFileInfo) mfi = NULL; (void)_ostree_repo_commit_modifier_apply (self, modifier, "/",