Merge branch 'PHP-8.2' into PHP-8.3

This commit is contained in:
David Carlier 2024-04-20 17:11:33 +01:00
commit 2636104a83
No known key found for this signature in database
GPG key ID: CEF290BB40D2086B
2 changed files with 6 additions and 4 deletions

1
NEWS
View file

@ -66,6 +66,7 @@ PHP NEWS
ext/session/mod_files.c). (nielsdos) ext/session/mod_files.c). (nielsdos)
. Fixed bug GH-13891 (memleak and segfault when using ini_set with . Fixed bug GH-13891 (memleak and segfault when using ini_set with
session.trans_sid_hosts). (nielsdos, kamil-tekiela) session.trans_sid_hosts). (nielsdos, kamil-tekiela)
. Fixed buffer _read/_write size limit on windows for the file mode. (David Carlier)
- Streams: - Streams:
. Fixed file_get_contents() on Windows fails with "errno=22 Invalid . Fixed file_get_contents() on Windows fails with "errno=22 Invalid

View file

@ -86,6 +86,7 @@
# ifndef O_NOFOLLOW # ifndef O_NOFOLLOW
# define O_NOFOLLOW 0 # define O_NOFOLLOW 0
# endif # endif
#define SESS_FILE_BUF_SIZE(sz) ((unsigned int)(sz > INT_MAX ? INT_MAX : (unsigned int)sz))
#endif #endif
typedef struct { typedef struct {
@ -246,7 +247,7 @@ static zend_result ps_files_write(ps_files *data, zend_string *key, zend_string
lseek(data->fd, 0, SEEK_SET); lseek(data->fd, 0, SEEK_SET);
#ifdef PHP_WIN32 #ifdef PHP_WIN32
{ {
unsigned int to_write = ZSTR_LEN(val) > UINT_MAX ? UINT_MAX : (unsigned int)ZSTR_LEN(val); unsigned int to_write = SESS_FILE_BUF_SIZE(ZSTR_LEN(val));
char *buf = ZSTR_VAL(val); char *buf = ZSTR_VAL(val);
int wrote; int wrote;
@ -255,7 +256,7 @@ static zend_result ps_files_write(ps_files *data, zend_string *key, zend_string
n += wrote; n += wrote;
buf = wrote > -1 ? buf + wrote : 0; buf = wrote > -1 ? buf + wrote : 0;
to_write = wrote > -1 ? (ZSTR_LEN(val) - n > UINT_MAX ? UINT_MAX : (unsigned int)(ZSTR_LEN(val) - n)): 0; to_write = wrote > -1 ? SESS_FILE_BUF_SIZE(ZSTR_LEN(val) - n) : 0;
} while(wrote > 0); } while(wrote > 0);
} }
@ -493,7 +494,7 @@ PS_READ_FUNC(files)
lseek(data->fd, 0, SEEK_SET); lseek(data->fd, 0, SEEK_SET);
#ifdef PHP_WIN32 #ifdef PHP_WIN32
{ {
unsigned int to_read = ZSTR_LEN(*val) > UINT_MAX ? UINT_MAX : (unsigned int)ZSTR_LEN(*val); unsigned int to_read = SESS_FILE_BUF_SIZE(ZSTR_LEN(*val));
char *buf = ZSTR_VAL(*val); char *buf = ZSTR_VAL(*val);
int read_in; int read_in;
@ -502,7 +503,7 @@ PS_READ_FUNC(files)
n += read_in; n += read_in;
buf = read_in > -1 ? buf + read_in : 0; buf = read_in > -1 ? buf + read_in : 0;
to_read = read_in > -1 ? (ZSTR_LEN(*val) - n > UINT_MAX ? UINT_MAX : (unsigned int)(ZSTR_LEN(*val) - n)): 0; to_read = read_in > -1 ? SESS_FILE_BUF_SIZE(ZSTR_LEN(*val) - n) : 0;
} while(read_in > 0); } while(read_in > 0);