Hi Rob,

On Thu, Sep 01, 2016 at 12:14:02PM +0100, Robert Shearman wrote:
> On 01/09/16 05:34, Salvatore Bonaccorso wrote:
> >Hi,
> >
> >On Tue, Aug 30, 2016 at 10:11:33AM +0100, Robert Shearman wrote:
> >>On Fri, 26 Aug 2016 21:52:11 +0200 Frank Heckenbach
> >><f.heckenb...@fh-soft.de> wrote:
> >>>Package: flex
> >>>Version: 2.5.39-8+deb8u1
> >>>Severity: normal
> >>>
> >>>After this update, I get the following warning when compiling the
> >>>flex generated code with gcc, which I didn't get before:
> >>>
> >>>scan.cpp: In function ??????int yy_get_next_buffer(yyscan_t)??????:
> >>>scan.cpp:758:18: error: comparison between signed and unsigned integer 
> >>>expressions [-Werror=sign-compare]
> >>>scan.cpp:1384:3: note: in expansion of macro ??????YY_INPUT??????
> >>>
> >>>Looking at the code:
> >>>
> >>>#define YY_INPUT(buf,result,max_size) \
> >>>   if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
> >>>           { \
> >>>           int c = '*'; \
> >>>           size_t n; \
> >>>           for ( n = 0; n < max_size && \
> >>>
> >>>Invoked as:
> >>>
> >>>int num_to_read = ...
> >>>YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
> >>>                   yyg->yy_n_chars, num_to_read );
> >>>
> >>>So indeed an unsigned value (n) is compared with a signed one
> >>>(num_to_read). If this is correct, the warning can be silenced with
> >>>a cast of the appropriate one of them.
> >>
> >>I've run into the same bug and agree with Frank's analysis. I've confirmed
> >>that the following upstream commit fixes it:
> >>
> >>https://github.com/westes/flex/commit/3946924ed5e77420c453bf841603c7278766093a
> >
> >Could you test the following packages:
> >
> >https://people.debian.org/~carnil/tmp/flex/
> 
> Thanks for the quick response. Unfortunately, so those packages don't fix
> the warning:
> 
> src/npf/npf_scan.c: In function ‘yy_get_next_buffer’:
> src/npf/npf_scan.c:852:18: error: comparison between signed and unsigned
> integer expressions [-Werror=sign-compare]
>    for ( n = 0; n < max_size && \
>                   ^
> src/npf/npf_scan.c:1623:3: note: in expansion of macro ‘YY_INPUT’
>    YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
>    ^
> 
> However, the warning is actually because while the type of n has been fixed,
> num_to_read has reverted to yy_size_t:
> 
> #define YY_INPUT(buf,result,max_size) \
>         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
>                 { \
>                 int c = '*'; \
>                 int n; \
>                 for ( n = 0; n < max_size && \
>                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
> 
> ...
> 
>                         yy_size_t num_to_read =
>                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
> number_to_move -
>  1;
> 
> So the effect is that 0006-CVE-2016-6354.patch isn't getting applied.
> 
> Rebuilding from the sources you also posted, I see that the reason for this
> is that skel.c isn't getting rebuilt, which it should be based on the
> contents of flex.skl. The root cause of this is that skel.c is getting
> patched by quilt at the same time as flex.skl is, so make doesn't see a
> difference in the timestamps.
> 
> I've verified that by removing the changes to skel.c from
> 0002-Finish-fixing-the-ia64-buffer-issue.patch and
> 0003-ia64-buffer-fix-Some-more-fixes-for-the-ia64-buffer-.patch results in a
> package being built where the fix works and I don't see the sign comparison
> warning being output from compile of the .c file generated by flex.

You are right, apologies not having spotted it.

> Alternatively, I'm pretty sure that adding the resulting changes to skel.c
> in 0006-CVE-2016-6354.patch would work too.

I decided to actually patch skel.c, since that was the strategy
choosed by Manoj for the previous patches and not to diverge here/to
be consistent.

I uploaded new varaiants of the builds and the corresponding source
package to the same location. Still subject to testing/review before
doing any other steps.

Regards,
Salvatore

Reply via email to