BUG/MEDIUM: sample: Don't treat SMP_T_METH as SMP_T_STR.

In smp_dup(), don't consider a SMP_T_METH with an unknown method the same as
SMP_T_STR. The string and string length aren't stored at the same place.

This should be backported to 1.8.
This commit is contained in:
Olivier Houchard 2018-12-07 15:23:41 +01:00 committed by Willy Tarreau
parent 4d58ba79dd
commit 4468f1cacb
1 changed files with 5 additions and 2 deletions

View File

@ -666,11 +666,14 @@ int smp_dup(struct sample *smp)
case SMP_T_STR: case SMP_T_STR:
trash = get_trash_chunk(); trash = get_trash_chunk();
trash->data = smp->data.u.str.data; trash->data = smp->data.type == SMP_T_STR ?
smp->data.u.str.data : smp->data.u.meth.str.data;
if (trash->data > trash->size - 1) if (trash->data > trash->size - 1)
trash->data = trash->size - 1; trash->data = trash->size - 1;
memcpy(trash->area, smp->data.u.str.area, trash->data); memcpy(trash->area, smp->data.type == SMP_T_STR ?
smp->data.u.str.area : smp->data.u.meth.str.area,
trash->data);
trash->area[trash->data] = 0; trash->area[trash->data] = 0;
smp->data.u.str = *trash; smp->data.u.str = *trash;
break; break;