EVP_CipherUpdate函数不检查输入缓冲区长度,在外面进行判断。
This commit is contained in:
@@ -82,6 +82,12 @@ int decrypt_open(FILE* in,const unsigned char* key, const char* algorithm,unsign
|
|||||||
inlen = fread(inbuf, 1, MAX_CONFIG_LINE, in);
|
inlen = fread(inbuf, 1, MAX_CONFIG_LINE, in);
|
||||||
if (inlen <= 0)
|
if (inlen <= 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if(out_buff_len-buff_offset<inlen+EVP_CIPHER_block_size(cipher)-1)
|
||||||
|
{
|
||||||
|
out_buff_len*=2;
|
||||||
|
*pp_out=(unsigned char*)realloc(*pp_out,out_buff_len);
|
||||||
|
}
|
||||||
out_blk_len=out_buff_len-buff_offset;
|
out_blk_len=out_buff_len-buff_offset;
|
||||||
if (!EVP_CipherUpdate(ctx, *pp_out+buff_offset, &out_blk_len, inbuf, inlen))
|
if (!EVP_CipherUpdate(ctx, *pp_out+buff_offset, &out_blk_len, inbuf, inlen))
|
||||||
{
|
{
|
||||||
@@ -90,11 +96,7 @@ int decrypt_open(FILE* in,const unsigned char* key, const char* algorithm,unsign
|
|||||||
goto error_out;
|
goto error_out;
|
||||||
}
|
}
|
||||||
buff_offset+=out_blk_len;
|
buff_offset+=out_blk_len;
|
||||||
if(buff_offset==out_buff_len)
|
|
||||||
{
|
|
||||||
out_buff_len*=2;
|
|
||||||
*pp_out=(unsigned char*)realloc(*pp_out,out_buff_len);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (!EVP_CipherFinal_ex(ctx, *pp_out+buff_offset, &out_blk_len))
|
if (!EVP_CipherFinal_ex(ctx, *pp_out+buff_offset, &out_blk_len))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user