aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpsykose <alice@ayaya.dev>2022-07-16 00:27:58 +0000
committerpsykose <alice@ayaya.dev>2022-07-16 02:27:58 +0200
commitf3d3e2a3aae649a21fe45f2471e6509e14e3a54a (patch)
tree5dcc5fe297ac67a99bb46ff14a24a56f3ff9f63c
parentaf6f1ed7ff47689806e98e09f24899bb29fe2948 (diff)
main/ncurses: fix CVE-2022-29458
ncurses does not keep old tarballs.. the github mirror ones are file-identical (only file access time differs, actual file contents are bit identical)
-rw-r--r--main/ncurses/APKBUILD14
-rw-r--r--main/ncurses/CVE-2022-29458.patch33
2 files changed, 43 insertions, 4 deletions
diff --git a/main/ncurses/APKBUILD b/main/ncurses/APKBUILD
index b699ef7cb41..7bb1a5691e0 100644
--- a/main/ncurses/APKBUILD
+++ b/main/ncurses/APKBUILD
@@ -2,7 +2,8 @@
pkgname=ncurses
pkgver=6.3_p20211120
_ver=${pkgver/_p/-}
-pkgrel=0
+_mirror_commit=461e72d1826483cb2c2cb243412f2dc5b00b2b1a
+pkgrel=1
pkgdesc="Console display library"
url="https://invisible-island.net/ncurses/"
arch="all"
@@ -11,10 +12,14 @@ license="MIT"
makedepends_build="ncurses"
subpackages="$pkgname-static $pkgname-dev $pkgname-doc $pkgname-libs
$pkgname-terminfo-base:base:noarch $pkgname-terminfo:terminfo:noarch"
-source="https://invisible-mirror.net/archives/ncurses/current/ncurses-$_ver.tgz"
-builddir="$srcdir"/ncurses-$_ver
+source="$pkgname-$pkgver.tar.gz::https://github.com/mirror/ncurses/archive/$_mirror_commit.tar.gz
+ CVE-2022-29458.patch
+ "
+builddir="$srcdir"/ncurses-$_mirror_commit
# secfixes:
+# 6.2_p20211120-r1:
+# - CVE-2022-29458
# 6.2_p20200530-r0:
# - CVE-2021-39537
# 6.1_p20180414-r0:
@@ -114,5 +119,6 @@ static() {
}
sha512sums="
-35c8338b2196f49eb7de2c3193213e7ce2aaf6535547438f8b1774708ac66ac089128a7f732c61080a48d39f228dabbbe475814ecbe5b635595387e214f439cc ncurses-6.3-20211120.tgz
+0592d85520ecee36b148db40baff4060742c81ca77bbd79af6ce892dbff1a6a7fa6308ea1d55dc3356b06978e34b646c94f3b0bd60e36c17c522b8ca90b282d2 ncurses-6.3_p20211120.tar.gz
+b7904866af8afc7a163151a803ca506981d87f58ce9a720a28c27aa6fa1ac1cf43dad8916a8265779ff2253d2dbacb2793733cadf44dbe10f6cf894944042708 CVE-2022-29458.patch
"
diff --git a/main/ncurses/CVE-2022-29458.patch b/main/ncurses/CVE-2022-29458.patch
new file mode 100644
index 00000000000..9481a99a310
--- /dev/null
+++ b/main/ncurses/CVE-2022-29458.patch
@@ -0,0 +1,33 @@
+--- a/ncurses/tinfo/read_entry.c
++++ b/ncurses/tinfo/read_entry.c
+@@ -145,6 +145,7 @@ convert_strings(char *buf, char **Strings, int count, int size, char *table)
+ {
+ int i;
+ char *p;
++ bool corrupt = FALSE;
+
+ for (i = 0; i < count; i++) {
+ if (IS_NEG1(buf + 2 * i)) {
+@@ -154,8 +155,20 @@ convert_strings(char *buf, char **Strings, int count, int size, char *table)
+ } else if (MyNumber(buf + 2 * i) > size) {
+ Strings[i] = ABSENT_STRING;
+ } else {
+- Strings[i] = (MyNumber(buf + 2 * i) + table);
+- TR(TRACE_DATABASE, ("Strings[%d] = %s", i, _nc_visbuf(Strings[i])));
++ int nn = MyNumber(buf + 2 * i);
++ if (nn >= 0 && nn < size) {
++ Strings[i] = (nn + table);
++ TR(TRACE_DATABASE, ("Strings[%d] = %s", i,
++ _nc_visbuf(Strings[i])));
++ } else {
++ if (!corrupt) {
++ corrupt = TRUE;
++ TR(TRACE_DATABASE,
++ ("ignore out-of-range index %d to Strings[]", nn));
++ _nc_warning("corrupt data found in convert_strings");
++ }
++ Strings[i] = ABSENT_STRING;
++ }
+ }
+
+ /* make sure all strings are NUL terminated */