mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 02:37:28 +02:00
Fix to handle carriage return case in PEM end of line character handling (for Windows). Cleanup to consolidate duplicate end of line character handling code.
This commit is contained in:
@ -7556,6 +7556,15 @@ const char* const END_PUB_KEY = "-----END PUBLIC KEY-----";
|
||||
#endif
|
||||
|
||||
|
||||
static WC_INLINE char* SkipEndOfLineChars(char* line, const char* endOfLine)
|
||||
{
|
||||
/* eat end of line characters */
|
||||
while (line < endOfLine &&
|
||||
(line[0] == '\r' || line[0] == '\n')) {
|
||||
line++;
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
int wc_PemGetHeaderFooter(int type, const char** header, const char** footer)
|
||||
{
|
||||
@ -7794,11 +7803,8 @@ static int wc_EncryptedInfoParse(EncryptedInfo* info,
|
||||
else
|
||||
return BUFFER_E;
|
||||
|
||||
/* eat blank line */
|
||||
while (newline < bufferEnd &&
|
||||
(*newline == '\r' || *newline == '\n')) {
|
||||
newline++;
|
||||
}
|
||||
/* eat end of line characters */
|
||||
newline = SkipEndOfLineChars(newline, bufferEnd);
|
||||
|
||||
/* return new headerEnd */
|
||||
if (pBuffer)
|
||||
@ -8051,19 +8057,8 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
|
||||
headerEnd += XSTRLEN(header);
|
||||
|
||||
if ((headerEnd + 1) >= bufferEnd)
|
||||
return BUFFER_E;
|
||||
|
||||
/* eat end of line */
|
||||
if (headerEnd[0] == '\n')
|
||||
headerEnd++;
|
||||
else if (headerEnd[1] == '\n')
|
||||
headerEnd += 2;
|
||||
else {
|
||||
if (info)
|
||||
info->consumed = (long)(headerEnd+2 - (char*)buff);
|
||||
return BUFFER_E;
|
||||
}
|
||||
/* eat end of line characters */
|
||||
headerEnd = SkipEndOfLineChars(headerEnd, bufferEnd);
|
||||
|
||||
if (type == PRIVATEKEY_TYPE) {
|
||||
if (eccKey) {
|
||||
@ -8096,10 +8091,8 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
consumedEnd = footerEnd + XSTRLEN(footer);
|
||||
|
||||
if (consumedEnd < bufferEnd) { /* handle no end of line on last line */
|
||||
/* eat new line characters */
|
||||
while (consumedEnd < bufferEnd && consumedEnd[0] == '\n') {
|
||||
consumedEnd++;
|
||||
}
|
||||
/* eat end of line characters */
|
||||
consumedEnd = SkipEndOfLineChars(consumedEnd, bufferEnd);
|
||||
}
|
||||
|
||||
if (info)
|
||||
|
Reference in New Issue
Block a user