mirror of
https://github.com/openssl/openssl.git
synced 2025-02-17 14:32:04 +08:00
Check fflush on BIO_ctrl call
Bug found and fix suggested by Julian Rüth. Push error if fflush fails Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/3266)
This commit is contained in:
parent
5cc9776191
commit
595b2a4237
@ -190,6 +190,7 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
FILE *fp = (FILE *)b->ptr;
|
||||
FILE **fpp;
|
||||
char p[4];
|
||||
int st;
|
||||
|
||||
switch (cmd) {
|
||||
case BIO_C_FILE_SEEK:
|
||||
@ -317,10 +318,14 @@ static long file_ctrl(BIO *b, int cmd, long num, void *ptr)
|
||||
b->shutdown = (int)num;
|
||||
break;
|
||||
case BIO_CTRL_FLUSH:
|
||||
if (b->flags & BIO_FLAGS_UPLINK)
|
||||
UP_fflush(b->ptr);
|
||||
else
|
||||
fflush((FILE *)b->ptr);
|
||||
st = b->flags & BIO_FLAGS_UPLINK
|
||||
? UP_fflush(b->ptr) : fflush((FILE *)b->ptr);
|
||||
if (st == EOF) {
|
||||
SYSerr(SYS_F_FFLUSH, get_last_sys_error());
|
||||
ERR_add_error_data(1, "fflush()");
|
||||
BIOerr(BIO_F_FILE_CTRL, ERR_R_SYS_LIB);
|
||||
ret = 0;
|
||||
}
|
||||
break;
|
||||
case BIO_CTRL_DUP:
|
||||
ret = 1;
|
||||
|
@ -82,6 +82,7 @@ static ERR_STRING_DATA ERR_str_functs[] = {
|
||||
{ERR_PACK(0, SYS_F_GETSOCKOPT, 0), "getsockopt"},
|
||||
{ERR_PACK(0, SYS_F_GETSOCKNAME, 0), "getsockname"},
|
||||
{ERR_PACK(0, SYS_F_GETHOSTBYNAME, 0), "gethostbyname"},
|
||||
{ERR_PACK(0, SYS_F_FFLUSH, 0), "fflush"},
|
||||
{0, NULL},
|
||||
};
|
||||
|
||||
|
@ -159,6 +159,7 @@ typedef struct err_state_st {
|
||||
# define SYS_F_GETSOCKOPT 15
|
||||
# define SYS_F_GETSOCKNAME 16
|
||||
# define SYS_F_GETHOSTBYNAME 17
|
||||
# define SYS_F_FFLUSH 18
|
||||
|
||||
/* reasons */
|
||||
# define ERR_R_SYS_LIB ERR_LIB_SYS/* 2 */
|
||||
|
Loading…
Reference in New Issue
Block a user