From 60a2ee79453681822beb31864b028af66dcf4b0a Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 15 Dec 2017 07:13:48 +0100 Subject: [PATCH] MINOR: sample: rename the "len" converter to "length" This converter was recently introduced by commit ed0d24e ("MINOR: sample: add len converter"). As found by Cyril, it causes an issue in "http-request capture" statements. The non-obvious problem is that an old syntax for sample expressions and converters used to support a series of words, each representing a converter. This used to be how the "stick" directives were created initially. By having a converter called "len", a statement such as "http-request capture foo len 10" considers "len" as a converter and not as the capture length. This obsolete syntax needs to be changed in 1.9 but it's too late for other versions. It's worth noting that the same problem can happen if converters are registered on the fly using Lua. Other language keywords that currently have to be avoided in converters include "id", "table", "if", "unless". --- doc/configuration.txt | 2 +- src/sample.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/configuration.txt b/doc/configuration.txt index a9587129b..87fc56729 100644 --- a/doc/configuration.txt +++ b/doc/configuration.txt @@ -12941,7 +12941,7 @@ language([,]) use_backend english if en default_backend choose_your_language -len +length Get the length of the string. This can only be placed after a string sample fetch function or after a transformation keyword returning a string type. The result is of type integer. diff --git a/src/sample.c b/src/sample.c index 213dd317b..ed2aee010 100644 --- a/src/sample.c +++ b/src/sample.c @@ -1568,7 +1568,7 @@ static int sample_conv_djb2(const struct arg *arg_p, struct sample *smp, void *p return 1; } -static int sample_conv_strlen(const struct arg *arg_p, struct sample *smp, void *private) +static int sample_conv_length(const struct arg *arg_p, struct sample *smp, void *private) { int i = smp->data.u.str.len; smp->data.u.sint = i; @@ -2796,7 +2796,7 @@ static struct sample_conv_kw_list sample_conv_kws = {ILH, { { "base64", sample_conv_bin2base64,0, NULL, SMP_T_BIN, SMP_T_STR }, { "upper", sample_conv_str2upper, 0, NULL, SMP_T_STR, SMP_T_STR }, { "lower", sample_conv_str2lower, 0, NULL, SMP_T_STR, SMP_T_STR }, - { "len", sample_conv_strlen, 0, NULL, SMP_T_STR, SMP_T_SINT }, + { "length", sample_conv_length, 0, NULL, SMP_T_STR, SMP_T_SINT }, { "hex", sample_conv_bin2hex, 0, NULL, SMP_T_BIN, SMP_T_STR }, { "hex2i", sample_conv_hex2int, 0, NULL, SMP_T_STR, SMP_T_SINT }, { "ipmask", sample_conv_ipmask, ARG1(1,MSK4), NULL, SMP_T_IPV4, SMP_T_IPV4 },