diff --git a/g10/cpr.c b/g10/cpr.c index 154872013..a7fd1aaba 100644 --- a/g10/cpr.c +++ b/g10/cpr.c @@ -425,11 +425,17 @@ do_get_from_fd ( const char *keyword, int hidden, int getbool ) { if (i >= len-1 ) { + /* On the first iteration allocate a new buffer. If that + * buffer is too short at further iterations do a poor man's + * realloc. */ char *save = string; len += 100; string = hidden? xmalloc_secure ( len ) : xmalloc ( len ); if (save) - memcpy (string, save, i ); + { + memcpy (string, save, i); + xfree (save); + } else i = 0; }