From: Arran Cudbard-Bell Date: Sun, 3 Mar 2019 09:15:35 +0000 (+0800) Subject: Exit earlier in xlat_tokenize_alternation if the alternate is empty X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3aee6a6eb9ef0afe772afc4e9e5d913867faa317;p=thirdparty%2Ffreeradius-server.git Exit earlier in xlat_tokenize_alternation if the alternate is empty --- diff --git a/src/lib/server/xlat_tokenize.c b/src/lib/server/xlat_tokenize.c index 82de53dcce5..0a143ea2baf 100644 --- a/src/lib/server/xlat_tokenize.c +++ b/src/lib/server/xlat_tokenize.c @@ -155,29 +155,31 @@ static ssize_t xlat_tokenize_alternation(TALLOC_CTX *ctx, xlat_exp_t **head, cha * Allow the RHS to be empty as a special case. */ if (*p == '}') { - /* - * Hack up an empty string. - */ node->alternate = xlat_exp_alloc(node, XLAT_LITERAL, "", 0); - p++; - } else { - slen = xlat_tokenize_literal(node, &node->alternate, p, true, rules); - if (slen <= 0) { - talloc_free(node); - return slen - (p - fmt); - } + node->async_safe = node->child->async_safe; + *head = node; + return (p + 1) - fmt; + } - if (!node->alternate) { - talloc_free(node); - fr_strerror_printf("Empty expansion is invalid"); - return -(p - fmt); - } - p += slen; + /* + * Parse the alternate expansion. + */ + slen = xlat_tokenize_literal(node, &node->alternate, p, true, rules); + if (slen <= 0) { + talloc_free(node); + return slen - (p - fmt); } - node->async_safe = (node->child->async_safe && node->alternate->async_safe); + if (!node->alternate) { + talloc_free(node); + fr_strerror_printf("Empty expansion is invalid"); + return -(p - fmt); + } + p += slen; + node->async_safe = (node->child->async_safe && node->alternate->async_safe); *head = node; + return p - fmt; }