I had to be mroe detailed :) I meant "simple reg test" + address sanitizer which we run in travis
address sanitizer is capable of catching those things пн, 24 июн. 2019 г. в 11:18, Илья Шипицин <chipits...@gmail.com>: > Does it make sense to also add regtest on that regression? > > On Mon, Jun 24, 2019, 1:14 AM Tim Duesterhus <t...@bastelstu.be> wrote: > >> Consider this configuration: >> >> frontend fe_http >> mode http >> bind *:8080 >> >> default_backend be_http >> >> backend be_http >> mode http >> server example example.com:80 >> >> program foo bar >> >> Running with valgrind results in: >> >> ==16252== Invalid read of size 8 >> ==16252== at 0x52AE3F: cfg_parse_program (mworker-prog.c:233) >> ==16252== by 0x4823B3: readcfgfile (cfgparse.c:2180) >> ==16252== by 0x47BCED: init (haproxy.c:1649) >> ==16252== by 0x404E22: main (haproxy.c:2714) >> ==16252== Address 0x48 is not stack'd, malloc'd or (recently) free'd >> >> Check whether `ext_child` is valid before attempting to free it and its >> contents. >> >> This bug was introduced in 9a1ee7ac31c56fd7d881adf2ef4659f336e50c9f. >> This fix must be backported to HAProxy 2.0. >> --- >> src/mworker-prog.c | 30 ++++++++++++++++-------------- >> 1 file changed, 16 insertions(+), 14 deletions(-) >> >> diff --git a/src/mworker-prog.c b/src/mworker-prog.c >> index 467ce9b24..ba52406e9 100644 >> --- a/src/mworker-prog.c >> +++ b/src/mworker-prog.c >> @@ -230,22 +230,24 @@ int cfg_parse_program(const char *file, int >> linenum, char **args, int kwm) >> return err_code; >> >> error: >> - LIST_DEL(&ext_child->list); >> - if (ext_child->command) { >> - int i; >> - >> - for (i = 0; ext_child->command[i]; i++) { >> - if (ext_child->command[i]) { >> - free(ext_child->command[i]); >> - ext_child->command[i] = NULL; >> + if (ext_child) { >> + LIST_DEL(&ext_child->list); >> + if (ext_child->command) { >> + int i; >> + >> + for (i = 0; ext_child->command[i]; i++) { >> + if (ext_child->command[i]) { >> + free(ext_child->command[i]); >> + ext_child->command[i] = NULL; >> + } >> } >> + free(ext_child->command); >> + ext_child->command = NULL; >> + } >> + if (ext_child->id) { >> + free(ext_child->id); >> + ext_child->id = NULL; >> } >> - free(ext_child->command); >> - ext_child->command = NULL; >> - } >> - if (ext_child->id) { >> - free(ext_child->id); >> - ext_child->id = NULL; >> } >> >> free(ext_child); >> -- >> 2.21.0 >> >> >>