Fix conversion of nul-containing strings to binary.

Move key length checks to a common place.
This commit is contained in:
Michael R Sweet 2021-11-02 09:12:43 -04:00
parent af07f64bc3
commit 1e33878506
No known key found for this signature in database
GPG Key ID: BE67C75EC81F3244
3 changed files with 14 additions and 11 deletions

View File

@ -640,17 +640,13 @@ _pdfioCryptoUnlock(
} }
else else
{ {
if (length < 40 || length > 128)
length = 128; // Default to 128 bits
if (!strcmp(cfm, "V2")) if (!strcmp(cfm, "V2"))
{
pdf->encryption = PDFIO_ENCRYPTION_RC4_128; pdf->encryption = PDFIO_ENCRYPTION_RC4_128;
if (length < 40 || length > 128) else if (!strcmp(cfm, "AESV2"))
length = 128;
}
if (!strcmp(cfm, "AESV2"))
{
pdf->encryption = PDFIO_ENCRYPTION_AES_128; pdf->encryption = PDFIO_ENCRYPTION_AES_128;
length = 128;
}
} }
} }
else if (version == 1 || version == 2) else if (version == 1 || version == 2)

View File

@ -284,7 +284,9 @@ _pdfioTokenRead(_pdfio_token_t *tb, // I - Token buffer/stack
int tch = get_char(tb); // Next char int tch = get_char(tb); // Next char
if (tch >= '0' && tch <= '7') if (tch >= '0' && tch <= '7')
{
ch = (char)((ch << 3) | (tch - '0')); ch = (char)((ch << 3) | (tch - '0'));
}
else else
{ {
tb->bufptr --; tb->bufptr --;
@ -377,8 +379,10 @@ _pdfioTokenRead(_pdfio_token_t *tb, // I - Token buffer/stack
*buffer = '<'; *buffer = '<';
for (litptr = bufptr - 1, hexptr = buffer + 2 * bytes - 1; litptr > buffer; litptr --, hexptr -= 2) for (litptr = bufptr - 1, hexptr = buffer + 2 * bytes - 1; litptr > buffer; litptr --, hexptr -= 2)
{ {
hexptr[0] = hexchars[(*litptr >> 4) & 15]; int litch = *litptr; // Grab the character
hexptr[1] = hexchars[*litptr & 15];
hexptr[0] = hexchars[(litch >> 4) & 15];
hexptr[1] = hexchars[litch & 15];
} }
bufptr = buffer + 2 * bytes + 1; bufptr = buffer + 2 * bytes + 1;
} }

View File

@ -400,6 +400,9 @@ _pdfioValueRead(pdfio_file_t *pdf, // I - PDF file
tempptr = tb->bufptr; tempptr = tb->bufptr;
while (tempptr < tb->bufend && isspace(*tempptr & 255))
tempptr ++; // Skip whitespace as needed...
if (tempptr < tb->bufend && isdigit(*tempptr & 255)) if (tempptr < tb->bufend && isdigit(*tempptr & 255))
{ {
// Integer... // Integer...
@ -412,7 +415,7 @@ _pdfioValueRead(pdfio_file_t *pdf, // I - PDF file
} }
while (tempptr < tb->bufend && isspace(*tempptr & 255)) while (tempptr < tb->bufend && isspace(*tempptr & 255))
tempptr ++; tempptr ++; // Skip whitespace
if (tempptr < tb->bufend && *tempptr == 'R') if (tempptr < tb->bufend && *tempptr == 'R')
{ {