"Kyle J. McKay" <mack...@gmail.com> writes:

>> OK.  So we do not expect it to fail, but we still do want the side
>> effect of that function (i.e. accmulation into the field).
>>
>> Somebody care to send a final "agreed-upon" version?
>
> Yup, here it is:

Thanks.

> -- 8< --
>
> Since 6b4b013f18 (mailinfo: handle in-body header continuations,
> 2016-09-20, v2.11.0) mailinfo.c has contained new code with an
> assert of the form:
>
>       assert(call_a_function(...))
>
> The function in question, check_header, has side effects.  This
> means that when NDEBUG is defined during a release build the
> function call is omitted entirely, the side effects do not
> take place and tests (fortunately) start failing.
>
> Move the function call outside of the assert and assert on
> the result of the function call instead so that the code
> still works properly in a release build and passes the tests.
>
> Since the only time that mi->inbody_header_accum is appended to is
> in check_inbody_header, and appending onto a blank
> mi->inbody_header_accum always happens when is_inbody_header is
> true, this guarantees a prefix that causes check_header to always
> return true.
>
> Therefore replace the assert with an if !check_header + DIE
> combination to reflect this.
>
> Helped-by: Jonathan Tan <jonathanta...@google.com>
> Helped-by: Jeff King <p...@peff.net>
> Acked-by: Johannes Schindelin <johannes.schinde...@gmx.de>
> Signed-off-by: Kyle J. McKay <mack...@gmail.com>
> ---
>
> Notes:
>     Please include this PATCH in 2.11.x maint
>
>  mailinfo.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mailinfo.c b/mailinfo.c
> index 2fb3877e..a489d9d0 100644
> --- a/mailinfo.c
> +++ b/mailinfo.c
> @@ -710,7 +710,8 @@ static void flush_inbody_header_accum(struct mailinfo *mi)
>  {
>       if (!mi->inbody_header_accum.len)
>               return;
> -     assert(check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0));
> +     if (!check_header(mi, &mi->inbody_header_accum, mi->s_hdr_data, 0))
> +             die("BUG: inbody_header_accum, if not empty, must always 
> contain a valid in-body header");
>       strbuf_reset(&mi->inbody_header_accum);
>  }
>  
> ---

Reply via email to