From c1d1306e276005428778c669a149f2a4cbc50c85 Mon Sep 17 00:00:00 2001 From: Thomas Pornin Date: Sun, 19 Mar 2017 20:46:16 +0100 Subject: [PATCH] Small improvement to tolerate PEM files missing the terminating newline in the brssl command-line tool. --- tools/files.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tools/files.c b/tools/files.c index 651d51a..8bf67cc 100644 --- a/tools/files.c +++ b/tools/files.c @@ -171,6 +171,7 @@ decode_pem(const void *src, size_t len, size_t *num) const unsigned char *buf; bvector bv = VEC_INIT; int inobj; + int extra_nl; *num = 0; br_pem_decoder_init(&pc); @@ -179,6 +180,7 @@ decode_pem(const void *src, size_t len, size_t *num) po.name = NULL; po.data = NULL; po.data_len = 0; + extra_nl = 1; while (len > 0) { size_t tlen; @@ -214,6 +216,19 @@ decode_pem(const void *src, size_t len, size_t *num) VEC_CLEAREXT(pem_list, &free_pem_object_contents); return NULL; } + + /* + * We add an extra newline at the end, in order to + * support PEM files that lack the newline on their last + * line (this is somwehat invalid, but PEM format is not + * standardised and such files do exist in the wild, so + * we'd better accept them). + */ + if (len == 0 && extra_nl) { + extra_nl = 0; + buf = (const unsigned char *)"\n"; + len = 1; + } } if (inobj) { fprintf(stderr, "ERROR: unfinished PEM object\n"); -- 2.17.1