Sexp changes between 1.5.3 and 1.6.0

Werner Koch wk at gnupg.org
Tue Jan 28 12:58:56 CET 2014


On Sat, 21 Dec 2013 21:15, ludo at gnu.org said:

> (BTW, as a Schemer, it took me a while to understand that car and nth do
> not correspond to their traditional Lisp counterpart: the Lisp car and
> nth return the given element, regardless of whether it is a list or an

Well, that is a bug and it is related to your reproted bug 1594.  I have
now fixed it in master and will backport it to 1.6:

    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


I don't expect that this will introduce incompatibilities.  A reason why
we have this uncommon behaviour in Libgcrypt is a bug in the original
GnuPG-2 code which created an S-expression "foo" at one place.  This is
clearly not allowed but I realized that too late and thus had to stick
with it for some years.  Meanwhile this problem has been solved in
GnuPG.


Shalom-Salam,

   Werner

-- 
Die Gedanken sind frei.  Ausnahmen regelt ein Bundesgesetz.




More information about the Gcrypt-devel mailing list