g10: Fix garbled status messages in NOTATION_DATA

* g10/cpr.c (write_status_text_and_buffer): Fix off-by-one
--

Depending on the escaping and line wrapping the computed remaining
buffer length could be wrong.  Fixed by always using a break to
terminate the escape detection loop.  Might have happened for all
status lines which may wrap.

GnuPG-bug-id: T6027
This commit is contained in:
Werner Koch 2022-06-14 11:33:27 +02:00
parent aeee62593a
commit 7b1db7192e
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
1 changed files with 4 additions and 9 deletions

View File

@ -328,20 +328,15 @@ write_status_text_and_buffer (int no, const char *string,
} }
first = 0; first = 0;
} }
for (esc=0, s=buffer, n=len; n && !esc; s++, n--) for (esc=0, s=buffer, n=len; n; s++, n--)
{ {
if (*s == '%' || *(const byte*)s <= lower_limit if (*s == '%' || *(const byte*)s <= lower_limit
|| *(const byte*)s == 127 ) || *(const byte*)s == 127 )
esc = 1; esc = 1;
if (wrap && ++count > wrap) if (wrap && ++count > wrap)
{ dowrap=1;
dowrap=1; if (esc || dowrap)
break; break;
}
}
if (esc)
{
s--; n++;
} }
if (s != buffer) if (s != buffer)
es_fwrite (buffer, s-buffer, 1, statusfp); es_fwrite (buffer, s-buffer, 1, statusfp);