From e3b218f9e5e9cc750045304d47169595941a8cd8 Mon Sep 17 00:00:00 2001 From: martijn Date: Tue, 22 Sep 2020 18:04:27 +0000 Subject: Allow handling long lines in an aliases table. Pointed out by AIsha Tammy (openbsd bugs aisha cc) Original diff by Edgar Pettijohn (edgar pettijohn-web com) OK tb@ --- usr.sbin/smtpd/mailaddr.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/usr.sbin/smtpd/mailaddr.c b/usr.sbin/smtpd/mailaddr.c index 4346e3dc..0965aea8 100644 --- a/usr.sbin/smtpd/mailaddr.c +++ b/usr.sbin/smtpd/mailaddr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mailaddr.c,v 1.3 2018/05/31 21:06:12 gilles Exp $ */ +/* $OpenBSD: mailaddr.c,v 1.4 2020/09/22 18:04:27 martijn Exp $ */ /* * Copyright (c) 2015 Gilles Chehade @@ -82,12 +82,10 @@ int mailaddr_line(struct maddrmap *maddrmap, const char *s) { struct maddrnode mn; - char buffer[LINE_MAX]; - char *p, *subrcpt; + char *p, *subrcpt, *buffer; int ret; - memset(buffer, 0, sizeof buffer); - if (strlcpy(buffer, s, sizeof buffer) >= sizeof buffer) + if ((buffer = strdup(s)) == NULL) return 0; p = buffer; @@ -95,12 +93,16 @@ mailaddr_line(struct maddrmap *maddrmap, const char *s) subrcpt = strip(subrcpt); if (subrcpt[0] == '\0') continue; - if (!text_to_mailaddr(&mn.mailaddr, subrcpt)) + if (!text_to_mailaddr(&mn.mailaddr, subrcpt)) { + free(buffer); return 0; + } log_debug("subrcpt: [%s]", subrcpt); maddrmap_insert(maddrmap, &mn); } + free(buffer); + if (ret >= 0) return 1; /* expand_line_split() returned < 0 */ -- cgit v1.2.3-59-g8ed1b