apk: backport upstream fix for invalid fetch timestamps

Uninitialized memory led to bogus, huge timestamps being set on files
downloaded with the wget backend. This caused odd issues like 'ls -l'
crashing busybox when attempting to list the .apk file afterwards.

Link: https://gitlab.alpinelinux.org/alpine/apk-tools/-/commit/42f159e67bafe1dad16839c0c0a005b5e89487ba
Signed-off-by: Matt Merhar <mattmerhar@protonmail.com>
Link: https://github.com/openwrt/openwrt/pull/21874
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit f750e3096f)
This commit is contained in:
Matt Merhar
2026-02-05 17:12:56 +01:00
committed by Robert Marko
parent a3821c7798
commit 2151b98144
3 changed files with 35 additions and 2 deletions
+1 -1
View File
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=apk
PKG_RELEASE:=2
PKG_RELEASE:=3
PKG_SOURCE_URL=https://gitlab.alpinelinux.org/alpine/apk-tools.git
PKG_SOURCE_PROTO:=git
@@ -10,7 +10,7 @@ Signed-off-by: Paul Spooren <mail@aparcar.org>
--- a/src/database.c
+++ b/src/database.c
@@ -1918,7 +1918,7 @@ const char *apk_db_layer_name(int layer)
@@ -1919,7 +1919,7 @@ const char *apk_db_layer_name(int layer)
{
switch (layer) {
case APK_DB_LAYER_ROOT: return "lib/apk/db";
@@ -0,0 +1,33 @@
From 42f159e67bafe1dad16839c0c0a005b5e89487ba Mon Sep 17 00:00:00 2001
From: Matt Merhar <mattmerhar@protonmail.com>
Date: Sun, 1 Feb 2026 21:16:01 -0500
Subject: [PATCH] io: fix invalid fetch timestamps with wget backend
In OpenWrt it was noticed that files downloaded via 'apk fetch' had
huge, invalid timestamps.
An strace showed utimensat_time64() being called with tv_sec values like
-5268223168728060756 and 1167423650789556, causing even an 'ls -l' of
the file afterwards to crash busybox.
The explanation here is that the process_get_meta() stub in process.c
doesn't set anything, so the struct is filled with garbage.
To address this, zero init the struct in apk_ostream_copy_meta(). This
leads to the timestamp of the downloaded file being set to the current
time.
---
src/io.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
--- a/src/io.c
+++ b/src/io.c
@@ -1258,7 +1258,7 @@ int apk_ostream_fmt(struct apk_ostream *
void apk_ostream_copy_meta(struct apk_ostream *os, struct apk_istream *is)
{
- struct apk_file_meta meta;
+ struct apk_file_meta meta = { 0 };
apk_istream_get_meta(is, &meta);
os->ops->set_meta(os, &meta);
}