summaryrefslogtreecommitdiff
path: root/usr.sbin/rpki-client/roa.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/rpki-client/roa.c')
-rw-r--r--usr.sbin/rpki-client/roa.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/usr.sbin/rpki-client/roa.c b/usr.sbin/rpki-client/roa.c
index 3d29e6a598c..cff8115922c 100644
--- a/usr.sbin/rpki-client/roa.c
+++ b/usr.sbin/rpki-client/roa.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: roa.c,v 1.78 2024/05/24 12:57:20 tb Exp $ */
+/* $OpenBSD: roa.c,v 1.79 2024/11/05 18:09:16 tb Exp $ */
/*
* Copyright (c) 2022 Theo Buehler <tb@openbsd.org>
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -289,6 +289,11 @@ roa_parse(X509 **x509, const char *fn, int talid, const unsigned char *der,
goto out;
}
+ if (cert->ipsz == 0) {
+ warnx("%s: no IP address present", fn);
+ goto out;
+ }
+
/*
* If the ROA isn't valid, we accept it anyway and depend upon
* the code around roa_read() to check the "valid" field itself.
@@ -365,9 +370,11 @@ roa_read(struct ibuf *b)
io_read_buf(b, &p->ipsz, sizeof(p->ipsz));
io_read_buf(b, &p->expires, sizeof(p->expires));
- if ((p->ips = calloc(p->ipsz, sizeof(struct roa_ip))) == NULL)
- err(1, NULL);
- io_read_buf(b, p->ips, p->ipsz * sizeof(p->ips[0]));
+ if (p->ipsz > 0) {
+ if ((p->ips = calloc(p->ipsz, sizeof(p->ips[0]))) == NULL)
+ err(1, NULL);
+ io_read_buf(b, p->ips, p->ipsz * sizeof(p->ips[0]));
+ }
io_read_str(b, &p->aia);
io_read_str(b, &p->aki);