Make the public API function a2i_ASN1_STRING(3) actually work.
authorschwarze <schwarze@openbsd.org>
Fri, 19 Nov 2021 09:58:41 +0000 (09:58 +0000)
committerschwarze <schwarze@openbsd.org>
Fri, 19 Nov 2021 09:58:41 +0000 (09:58 +0000)
commit4fc3ccbc6eeb59b163d90b255eba7961c2a33ffb
tree280fa3b059fe6d0ecce3c3e02ddb9557cca1bdec
parenta94e758d52524e5dffeed621926b7dcd3d6b172a
Make the public API function a2i_ASN1_STRING(3) actually work.
It contained two bugs:

1. If an input line ended in a backslash requesting line continuation,
there was duplicate code for removing that backslash, erroneously
removing another byte from the input and often causing the function
to return failure instead of correctly parsing valid input.

2. According to a comment in the source code, the former big "for"
loop was intended to "clear all the crap off the end of the line",
but actually, if there were multiple characters on the line that
were not hexadecimal digits, only the last of those and everything
following it was deleted, while all the earlier ones remained.
Besides, code further down clearly intends to error out when there
are invalid characters, which makes no sense if earlier code already
deletes such characters.  Hence the comment did not only contradict
the code above it - but contradicted the code below it, too.

Resolve these contradiction in favour of stricter parsing:
No longer skip invalid characters but always error out
when any are found.

OK & "Unbelievable" tb@
lib/libcrypto/asn1/f_string.c