sexp: Fix broken gcry_sexp_nth.
authorWerner Koch <wk@gnupg.org>
Thu, 9 Jan 2014 18:14:09 +0000 (19:14 +0100)
committerWerner Koch <wk@gnupg.org>
Tue, 28 Jan 2014 11:52:30 +0000 (12:52 +0100)
commitcbdc355415f83ed62da4f3618767eba54d7e6d37
treec9f3876b94480a17cbc563ccca13395b1a689b6e
parent7460e9243b3cc050631c37ed4f2713ae7bcb6762
sexp: Fix broken gcry_sexp_nth.

* src/sexp.c (_gcry_sexp_nth): Return a valid S-expression for a data
element.
(NODE): Remove unused typedef.
(ST_HINT): Comment unused macro.

* tests/t-sexp.c (bug_1594): New.
(main): Run new test.
--

Before 1.6.0 gcry_sexp_nth (list, 0) with a LIST of "(a (b 3:pqr) (c
3:456) (d 3:xyz))" returned the entire list.  1.6.0 instead returned
NULL.  However, this is also surprising and the expected value would
be "(a)".  This patch fixes this.

Somewhat related to that gcry_sexp_nth returned a broken list if
requesting index 1 of a list like "(n foo)".  It returned just the
"foo" but not as a list which is required by the S-expression specs.
Due to this patch the returned value is now "(foo)".

Thanks to Ludovic Court├Ęs for pointing out these problems.

GnuPG-bug-id: 1594
doc/gcrypt.texi
src/sexp.c
tests/t-sexp.c