mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
Abdelilah Essiari <aes@george.lbl.gov> reports that for very small
records, EVP_EncodeUpdate() may misbehave. This happens when there's a record boundary between the two ending b64 equal signs, which makes EVP_EncodeUpdate think there has been more than one EOF, and therefore add an extra NUL at the end of the output buffer. This fix corrects that problem.
This commit is contained in:
parent
15c2e1260b
commit
35140f3354
@ -292,7 +292,17 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
|
||||
/* If we are at the end of input and it looks like a
|
||||
* line, process it. */
|
||||
if (((i+1) == inl) && (((n&3) == 0) || eof))
|
||||
{
|
||||
v=B64_EOF;
|
||||
/* In case things were given us in really small
|
||||
records (so two '=' were given in separate
|
||||
updates), eof may contain the incorrect number
|
||||
of ending bytes to skip, so let's redo the count */
|
||||
eof = 0;
|
||||
if (d[n-1] == '=') eof++;
|
||||
if (d[n-2] == '=') eof++;
|
||||
/* There will never be more than two '=' */
|
||||
}
|
||||
|
||||
if ((v == B64_EOF) || (n >= 64))
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user