From aa5801bcaade82ce58b9a70f320b7d0389e444b0 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 19 Apr 2019 11:35:22 +0200 Subject: [PATCH] BUG/MEDIUM: maps: only try to parse the default value when it's present Maps returning an IP address (e.g. map_str_ip) support an optional default value which must be parsed. Unfortunately the parsing code does not check for this argument's existence and uncondtionally tries to resolve the argument whenever the output is of type address, resulting in segfaults at parsing time when no such argument is provided. This patch adds the appropriate check. This fix may be backported as far as 1.6. --- src/map.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/map.c b/src/map.c index cf1489307..1a2190d9a 100644 --- a/src/map.c +++ b/src/map.c @@ -143,10 +143,10 @@ int sample_load_map(struct arg *arg, struct sample_conv *conv, 1, err, file, line)) return 0; - /* the maps of type IP have a string as defaultvalue. This - * string canbe anipv4 or an ipv6, we must convert it. + /* the maps of type IP support a string as default value. This + * string can be an ipv4 or an ipv6, we must convert it. */ - if (desc->conv->out_type == SMP_T_ADDR) { + if (arg[1].type != ARGT_STOP && desc->conv->out_type == SMP_T_ADDR) { struct sample_data data; if (!map_parse_ip(arg[1].data.str.area, &data)) { memprintf(err, "map: cannot parse default ip <%s>.",