diff --git a/main/php_streams.h b/main/php_streams.h index 5e1aa4f63be..5cc78aa4bf2 100755 --- a/main/php_streams.h +++ b/main/php_streams.h @@ -462,12 +462,6 @@ END_EXTERN_C() #define PHP_STREAM_CAST_MASK (PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE | PHP_STREAM_CAST_INTERNAL) BEGIN_EXTERN_C() PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err TSRMLS_DC); -/* This functions transforms the first char to 'w' if it's not 'r', 'a' or 'w' - * and strips any subsequent chars except '+' and 'b'. - * Use this to sanitize stream->mode if you call e.g. fdopen, fopencookie or - * any other function that expects standard modes and you allow non-standard - * ones. result should be a char[5]. */ -PHPAPI void php_stream_rep_nonstand_mode(php_stream *stream, char *result); END_EXTERN_C() /* use this to check if a stream can be cast into another form */ #define php_stream_can_cast(stream, as) _php_stream_cast((stream), (as), NULL, 0 TSRMLS_CC) diff --git a/main/streams/cast.c b/main/streams/cast.c index 89bfa0ab46a..d3be31b22e2 100644 --- a/main/streams/cast.c +++ b/main/streams/cast.c @@ -144,9 +144,9 @@ static COOKIE_IO_FUNCTIONS_T stream_cookie_functions = #endif /* }}} */ -/* {{{ php_stream_rep_nonstand_mode +/* {{{ php_stream_mode_sanitize_fdopen_fopencookie * Result should have at least size 5, e.g. to write wbx+\0 */ -PHPAPI void php_stream_rep_nonstand_mode(php_stream *stream, char *result) +void php_stream_mode_sanitize_fdopen_fopencookie(php_stream *stream, char *result) { /* replace modes not supported by fdopen and fopencookie, but supported * by PHP's fread(), so that their calls won't fail */ @@ -233,7 +233,7 @@ PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show { char fixed_mode[5]; - php_stream_rep_nonstand_mode(stream, fixed_mode); + php_stream_mode_sanitize_fdopen_fopencookie(stream, fixed_mode); *(FILE**)ret = fopencookie(stream, fixed_mode, PHP_STREAM_COOKIE_FUNCTIONS); } diff --git a/main/streams/php_streams_int.h b/main/streams/php_streams_int.h index 273d85eefb1..b0242c88845 100644 --- a/main/streams/php_streams_int.h +++ b/main/streams/php_streams_int.h @@ -59,6 +59,13 @@ #define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG) #endif +/* This functions transforms the first char to 'w' if it's not 'r', 'a' or 'w' + * and strips any subsequent chars except '+' and 'b'. + * Use this to sanitize stream->mode if you call e.g. fdopen, fopencookie or + * any other function that expects standard modes and you allow non-standard + * ones. result should be a char[5]. */ +void php_stream_mode_sanitize_fdopen_fopencookie(php_stream *stream, char *result); + void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper TSRMLS_DC); void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char *path, const char *caption TSRMLS_DC); diff --git a/main/streams/plain_wrapper.c b/main/streams/plain_wrapper.c index a3cb1b28d37..a23603a6403 100644 --- a/main/streams/plain_wrapper.c +++ b/main/streams/plain_wrapper.c @@ -491,7 +491,7 @@ static int php_stdiop_cast(php_stream *stream, int castas, void **ret TSRMLS_DC) /* we were opened as a plain file descriptor, so we * need fdopen now */ char fixed_mode[5]; - php_stream_rep_nonstand_mode(stream, fixed_mode); + php_stream_mode_sanitize_fdopen_fopencookie(stream, fixed_mode); data->file = fdopen(data->fd, fixed_mode); if (data->file == NULL) { return FAILURE;