summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wendler <polynomial-c@gentoo.org>2019-08-09 17:16:40 +0200
committerLars Wendler <polynomial-c@gentoo.org>2019-08-09 17:17:03 +0200
commit2ce3a8e57adc2ea9389c35301ce081ab89b42931 (patch)
treea6cef28c60f1af9bfff7c6409b8e2cfaddb90059
parentapp-misc/gramps: bump to 5.0.2 (diff)
downloadgentoo-2ce3a8e5.tar.gz
gentoo-2ce3a8e5.tar.bz2
gentoo-2ce3a8e5.zip
net-misc/dhcpcd: Revbump to fix incorrect string termination
Bug: https://bugs.gentoo.org/691426 Package-Manager: Portage-2.3.71, Repoman-2.3.17 Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
-rw-r--r--net-misc/dhcpcd/dhcpcd-8.0.2-r1.ebuild (renamed from net-misc/dhcpcd/dhcpcd-8.0.2.ebuild)4
-rw-r--r--net-misc/dhcpcd/files/dhcpcd-8.0.2-string_termination.patch80
2 files changed, 84 insertions, 0 deletions
diff --git a/net-misc/dhcpcd/dhcpcd-8.0.2.ebuild b/net-misc/dhcpcd/dhcpcd-8.0.2-r1.ebuild
index d8940210a7b5..1696c38dcf71 100644
--- a/net-misc/dhcpcd/dhcpcd-8.0.2.ebuild
+++ b/net-misc/dhcpcd/dhcpcd-8.0.2-r1.ebuild
@@ -27,6 +27,10 @@ COMMON_DEPEND="udev? ( virtual/udev )"
DEPEND="${COMMON_DEPEND}"
RDEPEND="${COMMON_DEPEND}"
+PATCHES=(
+ "${FILESDIR}"/${P}-string_termination.patch #691426
+)
+
src_configure() {
local myeconfargs=(
--dbdir="${EPREFIX}/var/lib/dhcpcd"
diff --git a/net-misc/dhcpcd/files/dhcpcd-8.0.2-string_termination.patch b/net-misc/dhcpcd/files/dhcpcd-8.0.2-string_termination.patch
new file mode 100644
index 000000000000..a1bc19ec974d
--- /dev/null
+++ b/net-misc/dhcpcd/files/dhcpcd-8.0.2-string_termination.patch
@@ -0,0 +1,80 @@
+https://bugs.gentoo.org/691426
+
+diff --git a/src/dhcp-common.c b/src/dhcp-common.c
+index 08ab9493..9f556557 100644
+--- a/src/dhcp-common.c
++++ b/src/dhcp-common.c
+@@ -645,14 +645,16 @@ print_option(FILE *fp, const char *prefix, const struct dhcp_opt *opt,
+ if (fputc('=', fp) == EOF)
+ return -1;
+ if (dl == 0)
+- return 1;
++ goto out;
+
+ if (opt->type & OT_RFC1035) {
+ char domain[NS_MAXDNAME];
+
+ sl = decode_rfc1035(domain, sizeof(domain), data, dl);
+- if (sl == 0 || sl == -1)
+- return sl;
++ if (sl == -1)
++ return -1;
++ if (sl == 0)
++ goto out;
+ if (valid_domainname(domain, opt->type) == -1)
+ return -1;
+ return efprintf(fp, "%s", domain);
+@@ -693,9 +695,7 @@ print_option(FILE *fp, const char *prefix, const struct dhcp_opt *opt,
+ return -1;
+ }
+ }
+- if (fputc('\0', fp) == EOF)
+- return -1;
+- return 1;
++ goto out;
+ }
+
+ t = data;
+@@ -760,6 +760,7 @@ print_option(FILE *fp, const char *prefix, const struct dhcp_opt *opt,
+ }
+ }
+
++out:
+ if (fputc('\0', fp) == EOF)
+ return -1;
+ return 1;
+diff --git a/src/script.c b/src/script.c
+index 74aef1b1..3dee7b08 100644
+--- a/src/script.c
++++ b/src/script.c
+@@ -33,6 +33,7 @@
+ #include <netinet/in.h>
+ #include <arpa/inet.h>
+
++#include <assert.h>
+ #include <ctype.h>
+ #include <errno.h>
+ #include <signal.h>
+@@ -477,12 +478,21 @@ dumplease:
+ fp = NULL;
+ #endif
+
++ /* Count the terminated env strings.
++ * assert that the terminations are correct. */
+ nenv = 0;
+ endp = buf + buf_pos;
+ for (bufp = buf; bufp < endp; bufp++) {
+- if (*bufp == '\0')
++ if (*bufp == '\0') {
++#ifndef NDEBUG
++ if (bufp + 1 < endp)
++ assert(*(bufp + 1) != '\0');
++#endif
+ nenv++;
++ }
+ }
++ assert(*--bufp == '\0');
++
+ if (ctx->script_envlen < nenv) {
+ env = reallocarray(ctx->script_env, nenv + 1, sizeof(*env));
+ if (env == NULL)