Merge branch 'jt/mailinfo-fold-in-body-headers'
authorJunio C Hamano <gitster@pobox.com>
Wed, 21 Dec 2016 22:55:03 +0000 (14:55 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 Dec 2016 22:55:03 +0000 (14:55 -0800)
Fix for NDEBUG builds.

* jt/mailinfo-fold-in-body-headers:
mailinfo.c: move side-effects outside of assert

1  2 
mailinfo.c
diff --combined mailinfo.c
index 2fb3877ee44e9cdc83c43fa23971f02a94b5a49f,e92aff9ded1ea43313a1a64b2190da0cf81f28d7..a489d9d0fbcc37a1198247a8daae4b3104ebe284
@@@ -54,86 -54,6 +54,86 @@@ static void parse_bogus_from(struct mai
        get_sane_name(&mi->name, &mi->name, &mi->email);
  }
  
 +static const char *unquote_comment(struct strbuf *outbuf, const char *in)
 +{
 +      int c;
 +      int take_next_litterally = 0;
 +
 +      strbuf_addch(outbuf, '(');
 +
 +      while ((c = *in++) != 0) {
 +              if (take_next_litterally == 1) {
 +                      take_next_litterally = 0;
 +              } else {
 +                      switch (c) {
 +                      case '\\':
 +                              take_next_litterally = 1;
 +                              continue;
 +                      case '(':
 +                              in = unquote_comment(outbuf, in);
 +                              continue;
 +                      case ')':
 +                              strbuf_addch(outbuf, ')');
 +                              return in;
 +                      }
 +              }
 +
 +              strbuf_addch(outbuf, c);
 +      }
 +
 +      return in;
 +}
 +
 +static const char *unquote_quoted_string(struct strbuf *outbuf, const char *in)
 +{
 +      int c;
 +      int take_next_litterally = 0;
 +
 +      while ((c = *in++) != 0) {
 +              if (take_next_litterally == 1) {
 +                      take_next_litterally = 0;
 +              } else {
 +                      switch (c) {
 +                      case '\\':
 +                              take_next_litterally = 1;
 +                              continue;
 +                      case '"':
 +                              return in;
 +                      }
 +              }
 +
 +              strbuf_addch(outbuf, c);
 +      }
 +
 +      return in;
 +}
 +
 +static void unquote_quoted_pair(struct strbuf *line)
 +{
 +      struct strbuf outbuf;
 +      const char *in = line->buf;
 +      int c;
 +
 +      strbuf_init(&outbuf, line->len);
 +
 +      while ((c = *in++) != 0) {
 +              switch (c) {
 +              case '"':
 +                      in = unquote_quoted_string(&outbuf, in);
 +                      continue;
 +              case '(':
 +                      in = unquote_comment(&outbuf, in);
 +                      continue;
 +              }
 +
 +              strbuf_addch(&outbuf, c);
 +      }
 +
 +      strbuf_swap(&outbuf, line);
 +      strbuf_release(&outbuf);
 +
 +}
 +
  static void handle_from(struct mailinfo *mi, const struct strbuf *from)
  {
        char *at;
        strbuf_init(&f, from->len);
        strbuf_addbuf(&f, from);
  
 +      unquote_quoted_pair(&f);
 +
        at = strchr(f.buf, '@');
        if (!at) {
                parse_bogus_from(mi, from);
@@@ -710,7 -628,8 +710,8 @@@ static void flush_inbody_header_accum(s
  {
        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);
  }