pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/pkgtools/pkg_install/files/lib



Module Name:    pkgsrc
Committed By:   wiz
Date:           Tue Feb 18 11:53:49 UTC 2025

Modified Files:
        pkgsrc/pkgtools/pkg_install/files/lib: pkg_signature.c

Log Message:
pkg_install: Avoid pkg_admin gpg-sign-package hang.

Previously would infinite loop if the input package size was an exact
multiple of 64KB.

>From Jonathan Perkin <jperkin%smartos.org@localhost>
via drecklypkg commit $b70ba6d6bfedf447d37e3ef53958d812534b06bb


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 \
    pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c
diff -u pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c:1.13 pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c:1.14
--- pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c:1.13  Wed Apr 19 21:42:50 2017
+++ pkgsrc/pkgtools/pkg_install/files/lib/pkg_signature.c       Tue Feb 18 11:53:49 2025
@@ -1,4 +1,4 @@
-/*     $NetBSD: pkg_signature.c,v 1.13 2017/04/19 21:42:50 joerg Exp $ */
+/*     $NetBSD: pkg_signature.c,v 1.14 2025/02/18 11:53:49 wiz Exp $   */
 
 #if HAVE_CONFIG_H
 #include "config.h"
@@ -7,7 +7,7 @@
 #if HAVE_SYS_CDEFS_H
 #include <sys/cdefs.h>
 #endif
-__RCSID("$NetBSD: pkg_signature.c,v 1.13 2017/04/19 21:42:50 joerg Exp $");
+__RCSID("$NetBSD: pkg_signature.c,v 1.14 2025/02/18 11:53:49 wiz Exp $");
 
 /*-
  * Copyright (c) 2008 Joerg Sonnenberger <joerg%NetBSD.org@localhost>.
@@ -631,17 +631,18 @@ pkg_sign_gpg(const char *name, const cha
 
        entry = archive_entry_new();
        archive_entry_copy_stat(entry, &sb);
+       size = archive_entry_size(entry);
 
        pkgname = extract_pkgname(fd);
-       hash_file = xasprintf(hash_template, pkgname,
-           (long long)archive_entry_size(entry));
+       hash_file = xasprintf(hash_template, pkgname, size);
        free(pkgname);
 
-       for (i = 0; i < archive_entry_size(entry); i += block_len) {
-               if (i + (off_t)sizeof(block) < archive_entry_size(entry))
+       for (i = 0; i < size; i += block_len) {
+               if (i + (off_t)sizeof(block) < size)
                        block_len = sizeof(block);
                else
-                       block_len = archive_entry_size(entry) % sizeof(block);
+                       block_len = size % sizeof(block) ?
+                           size % sizeof(block) : sizeof(block);
                if (read(fd, block, block_len) != (ssize_t)block_len)
                        err(2, "short read");
                hash_block(block, block_len, hash);
@@ -682,14 +683,13 @@ pkg_sign_gpg(const char *name, const cha
        archive_write_finish_entry(pkg);
        archive_entry_free(sign_entry);
 
-       size = archive_entry_size(entry);
        archive_write_header(pkg, entry);
 
        for (i = 0; i < size; i += block_len) {
                if (i + (off_t)sizeof(block) < size)
                        block_len = sizeof(block);
                else
-                       block_len = size % sizeof(block);
+                       block_len = size % sizeof(block) ? size % sizeof(block) : sizeof(block);
                if (read(fd, block, block_len) != (ssize_t)block_len)
                        err(2, "short read");
                archive_write_data(pkg, block, block_len);



Home | Main Index | Thread Index | Old Index