commit:     749ad1d7d40276594a2bb69c4d71da33b6abecbd
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 31 14:43:48 2020 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Jan 31 14:43:48 2020 +0000
URL:        https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=749ad1d7

qsize: solve theoretical key conflict for dev/inode

Jan Ziak pointed out that it is possible to generate the same key for
two different files.

Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org>

 qsize.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/qsize.c b/qsize.c
index e54f714..c78a35f 100644
--- a/qsize.c
+++ b/qsize.c
@@ -112,7 +112,7 @@ qsize_cb(tree_pkg_ctx *pkg_ctx, void *priv)
        uint64_t num_bytes;
        struct stat st;
        bool ok = false;
-       char ikey[2 * (sizeof(size_t) * 2) + 1];  /* hex rep */
+       char ikey[2 * (sizeof(size_t) * 2) + 1 + 1];  /* hex rep */
        size_t cur_uniq = cnt_set(state->uniq_files);
        bool isuniq;
 
@@ -143,7 +143,7 @@ qsize_cb(tree_pkg_ctx *pkg_ctx, void *priv)
                        if (fstatat(pkg_ctx->cat_ctx->ctx->portroot_fd,
                                                e->name + 1, &st, 
AT_SYMLINK_NOFOLLOW) == 0)
                        {
-                               snprintf(ikey, sizeof(ikey), "%zx%zx",
+                               snprintf(ikey, sizeof(ikey), "%zx:%zx",
                                                (size_t)st.st_dev, 
(size_t)st.st_ino);
                                state->uniq_files =
                                        add_set_unique(ikey, state->uniq_files, 
&isuniq);

Reply via email to