1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

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 4dbef2addc
commit 34c649b360
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B

View File

@ -372,20 +372,15 @@ write_status_text_and_buffer (int no, const char *string,
}
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
|| *(const byte*)s == 127 )
esc = 1;
if (wrap && ++count > wrap)
{
dowrap=1;
break;
}
}
if (esc)
{
s--; n++;
dowrap=1;
if (esc || dowrap)
break;
}
if (s != buffer)
es_fwrite (buffer, s-buffer, 1, statusfp);