X-Git-Url: https://www.bearssl.org/gitweb//home/git/?p=BearSSL;a=blobdiff_plain;f=tools%2Ffiles.c;h=8bf67cc3b4f3c169e573a59f3647db9e309f185d;hp=651d51a06f0fb3eb864717eb4e5f900584516418;hb=c1d1306e276005428778c669a149f2a4cbc50c85;hpb=e61ad42191511226309bad2cbde8cd9e8cc743cb 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");