From 39d26ddac4dd652be65e429b62a9443ed3dfa823 Mon Sep 17 00:00:00 2001 From: "Sven M. Hallberg" <pesco@khjk.org> Date: Sat, 8 Feb 2020 15:22:20 +0100 Subject: [PATCH] fix segfault in pp_dict for 0-element dictionaries the code would still try to print a last element. also rearrange the loop to avoid code duplication and use delta-1 spaces after the comma. --- pdf.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/pdf.c b/pdf.c index 859c460..f15bc6c 100644 --- a/pdf.c +++ b/pdf.c @@ -177,26 +177,20 @@ pp_dict(FILE *stream, const HParsedToken *tok, int indent, int delta) { const HCountedArray *k_v; - if (tok->seq->used == 0) + if (tok->seq->used == 0) { fprintf(stream, "{ }"); - /* If there is more than one key-value pair, print all but - * the last, followed by commas. */ - else { - fprintf(stream, "{%*s", delta - 1, ""); - for (size_t i = 0; i < tok->seq->used-1; i++) { - k_v = tok->seq->elements[i]->seq; - h_pprint(stream, k_v->elements[0], indent + delta, delta); - fprintf(stream, ":"); - h_pprint(stream, k_v->elements[1], indent + delta, delta); - fprintf(stream, "\n%*s, ", indent, ""); - } + return; + } + + fprintf(stream, "{%*s", delta - 1, ""); + for (size_t i = 0; i < tok->seq->used; i++) { + k_v = tok->seq->elements[i]->seq; + if (i > 0) + fprintf(stream, "\n%*s,%*s", indent, "", delta - 1, ""); + h_pprint(stream, k_v->elements[0], indent + delta, delta); + fprintf(stream, ":"); + h_pprint(stream, k_v->elements[1], indent + delta, delta); } - - /* Special case: the last entry doesn't have a comma after it */ - k_v = tok->seq->elements[(tok->seq->used)-1]->seq; - h_pprint(stream, k_v->elements[0], indent + delta, delta); - fprintf(stream, ":"); - h_pprint(stream, k_v->elements[1], indent + delta, delta); if (tok->seq->used > 2) fprintf(stream, "\n%*s}", indent, ""); -- GitLab