Hey! The documentation of req.hdr() says that "name" is optional. However, no match can bound without specifying the name. In `smp_fetch_hdr()`, we have:
#v+ if (args) { if (args[0].type != ARGT_STR) return 0; name_str = args[0].data.str.str; name_len = args[0].data.str.len; if (args[1].type == ARGT_SINT) occ = args[1].data.sint; } #v- When empty, `args == empty_arg_list` and `args->type == 0`. So, the check could be changed to `args && args == empty_arg_list` (no other occurence in the code) or to `args && args[0].type == ARGT_STR`. For req.fhdr(), documentation sthats that name is not optional but the code is similar and it shouldn't be different from req.hdr(). For req.fhdr_cnt(), the name is optional and the code is correct in this respect: #v+ if (args && args->type == ARGT_STR) { name = args->data.str.str; len = args->data.str.len; } #v- Also, there are a lot of `if (args)`, while it seems that `args` is guaranteed to be non-NULL. So, those occurrences should be replaced by `if (args != empty_arg_list)`, right? No patch proposed yet, since I am unsure of the right direction. -- Make your program read from top to bottom. - The Elements of Programming Style (Kernighan & Plauger)