From: Rusty Russell Date: Thu, 18 Aug 2022 02:06:59 +0000 (+0930) Subject: rune: fix encoding of alternates which need escapes. X-Git-Url: https://git.ozlabs.org/?a=commitdiff_plain;h=0a254f0adc987c54fd4f6b12b7a74d2e6fa3d476;p=ccan rune: fix encoding of alternates which need escapes. Signed-off-by: Rusty Russell --- diff --git a/ccan/rune/coding.c b/ccan/rune/coding.c index b9255b0b..380a225c 100644 --- a/ccan/rune/coding.c +++ b/ccan/rune/coding.c @@ -98,7 +98,7 @@ static void rune_altern_encode(const struct rune_altern *altern, break; esc[1] = p[len]; cb(esc, 2, arg); - p++; + p += len + 1; } } diff --git a/ccan/rune/test/run-altern-escape.c b/ccan/rune/test/run-altern-escape.c new file mode 100644 index 00000000..550cafae --- /dev/null +++ b/ccan/rune/test/run-altern-escape.c @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include + +int main(void) +{ + static const u8 secret_zero[16]; + struct rune *rune; + struct rune_restr *restr; + const tal_t *ctx = tal(NULL, char); + + plan_tests(9); + restr = rune_restr_from_string(ctx, "desc=@tipjar\\|jb55@sendsats.lol", + strlen("desc=@tipjar\\|jb55@sendsats.lol")); + ok1(tal_count(restr->alterns) == 1); + ok1(restr->alterns[0]->condition == '='); + ok1(streq(restr->alterns[0]->fieldname, "desc")); + ok1(streq(restr->alterns[0]->value, "@tipjar|jb55@sendsats.lol")); + + rune = rune_new(ctx, secret_zero, sizeof(secret_zero), NULL); + rune_add_restr(rune, take(restr)); + + /* Converting via base64 should not change it! */ + rune = rune_from_base64(ctx, rune_to_base64(ctx, rune)); + ok1(tal_count(rune->restrs) == 1); + restr = rune->restrs[0]; + ok1(tal_count(restr->alterns) == 1); + ok1(restr->alterns[0]->condition == '='); + ok1(streq(restr->alterns[0]->fieldname, "desc")); + ok1(streq(restr->alterns[0]->value, "@tipjar|jb55@sendsats.lol")); + + tal_free(ctx); + /* This exits depending on whether all tests passed */ + return exit_status(); +}