ssh: Fix adding an ed25519 key with a zero length comment.

* agent/command-ssh.c (sexp_key_construct): Do not put an empty string
into an S-expression.
(stream_read_string): Do not not try to a read a zero length block.
--

Actually we could handles this different by not putting a comment tag
into the s-expression, however this requires more code and at other
places we already return "(none)" instead of an empty comment.

The second fix is more or less a cosmetic thing to get better error
messages in case the underlying read system call returns an error.

GnuPG-bug-id: 5794
This commit is contained in:
Werner Koch 2022-01-28 19:59:11 +01:00
parent e1fc053dc1
commit 2331900d1c
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
1 changed files with 10 additions and 4 deletions

View File

@ -613,7 +613,7 @@ stream_read_string (estream_t stream, unsigned int secure,
}
/* Read data. */
err = stream_read_data (stream, buffer, length);
err = length? stream_read_data (stream, buffer, length) : 0;
if (err)
goto out;
@ -623,7 +623,7 @@ stream_read_string (estream_t stream, unsigned int secure,
}
else /* Dummy read requested. */
{
err = stream_read_skip (stream, length);
err = length? stream_read_skip (stream, length) : 0;
if (err)
goto out;
}
@ -1725,6 +1725,11 @@ sexp_key_construct (gcry_sexp_t *r_sexp,
estream_t format = NULL;
char *algo_name = NULL;
/* We can't encode an empty string in an S-expression, thus to keep
* the code simple we use "(none)" instead. */
if (!comment || !*comment)
comment = "(none)";
if ((key_spec.flags & SPEC_FLAG_IS_EdDSA))
{
/* It is much easier and more readable to use a separate code
@ -1744,7 +1749,7 @@ sexp_key_construct (gcry_sexp_t *r_sexp,
"(comment%s))",
curve_name,
mpis[0], mpis[1],
comment? comment:"");
comment);
else
err = gcry_sexp_build (&sexp_new, NULL,
"(public-key(ecc(curve %s)"
@ -1752,7 +1757,8 @@ sexp_key_construct (gcry_sexp_t *r_sexp,
"(comment%s))",
curve_name,
mpis[0],
comment? comment:"");
comment);
}
else
{