[MPlayer-dev-eng] [PATCHv2 3/8] stream ftp: readline: Always try to read complete lines

Reimar Döffinger Reimar.Doeffinger at gmx.de
Sun Nov 18 14:16:50 CET 2012


On Sun, Nov 18, 2012 at 02:12:37PM +0100, Reimar Döffinger wrote:
> On Sat, Nov 17, 2012 at 01:01:58AM +0100, Alexander Strasser wrote:
> > @@ -144,8 +149,20 @@ static int readline(char *buf,int max,struct stream_priv_s *ctl)
> >  	}
> >        }
> >        if (max == 1) {
> > -	*buf = '\0';
> > -	break;
> > +        int found_eol = 0;
> > +
> > +        while (ctl->cavail > 0) { // skip remaining response line
> > +          found_eol = *ctl->cget == '\n';
> > +          --ctl->cavail; ++ctl->cget;
> > +
> > +          if (found_eol) {
> > +            break;
> > +          }
> > +        }
> > +
> > +        if (found_eol) {
> > +	  break;
> > +        }
> 
> I find this code quite non-obvious.
> Maybe instead
> char *eol = memchr(ctl->cget, ctl->cavail);
> if (eol) {
>   eol++;
>   ctl->cavail -= eol - ctl->cget;
>   ctl->cget = eol;
>   break;
> }
> // read more data to find end of current line
> 
> I also wonder if we should do something against the
> possibility that a hacked server could keep us in the
> loop forever...

I forgot to ask: Did you check it is okay to skip
the cget == cput check and resetting all fields code
when we break the loop here?


More information about the MPlayer-dev-eng mailing list