Hi Daniel,

On Wed, Aug 30, 2017 at 03:53:59PM +0200, Daniel Borkmann wrote:
> On 08/29/2017 05:09 PM, Phil Sutter wrote:
[...]
> > @@ -228,18 +229,20 @@ static int bpf_parse_string(char *arg, bool 
> > from_file, __u16 *bpf_len,
> >                     case '\n':
> >                             if (c_prev != ',')
> >                                     *(pos++) = ',';
> > +                           c_prev = ',';
> >                             break;
> >                     case ' ':
> >                     case '\t':
> >                             if (c_prev != ' ')
> >                                     *(pos++) = c;
> > +                           c_prev = ' ';
> >                             break;
> >                     default:
> >                             *(pos++) = c;
> > +                           c_prev = c;
> >                     }
> >                     if (pos - tmp_string == tmp_len)
> >                             break;
> > -                   c_prev = c;
> 
> I don't really have a strong opinion on this, but the logic for
> normalizing here is getting a bit convoluted. Is your use case
> for making the parser more robust mainly so you can just use the
> -ddd output from tcpdump for cBPF w/o piping through tr? But even
> that shouldn't give multiple empty lines afaik, no?

Well, using tcpdump output was functional before already. I just noticed
that if I add an empty line to the end of bytecode-file, it will fail
and I didn't like that. Then while searching for the EOF issue, I
noticed that the parser logic above is a bit faulty in that it will
treat different characters equally but doesn't make sure c_prev will be
assigned only one of them. So apart from the added robustness, it really
fixes an inconsistency in the parsing logic.

Cheers, Phil

Reply via email to