Skip to content

Commit 5664042

Browse files
committed
Add a mechanism in zend_test to simulate early return of copy_file_range
1 parent 6660599 commit 5664042

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

ext/zend_test/php_test.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ ZEND_BEGIN_MODULE_GLOBALS(zend_test)
5353
int replace_zend_execute_ex;
5454
int register_passes;
5555
bool print_stderr_mshutdown;
56+
zend_long limit_copy_file_range;
5657
zend_test_fiber *active_fiber;
5758
zend_long quantity_value;
5859
zend_string *str_test;

ext/zend_test/test.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -650,6 +650,9 @@ PHP_INI_BEGIN()
650650
STD_PHP_INI_BOOLEAN("zend_test.replace_zend_execute_ex", "0", PHP_INI_SYSTEM, OnUpdateBool, replace_zend_execute_ex, zend_zend_test_globals, zend_test_globals)
651651
STD_PHP_INI_BOOLEAN("zend_test.register_passes", "0", PHP_INI_SYSTEM, OnUpdateBool, register_passes, zend_zend_test_globals, zend_test_globals)
652652
STD_PHP_INI_BOOLEAN("zend_test.print_stderr_mshutdown", "0", PHP_INI_SYSTEM, OnUpdateBool, print_stderr_mshutdown, zend_zend_test_globals, zend_test_globals)
653+
#ifdef HAVE_COPY_FILE_RANGE
654+
STD_PHP_INI_ENTRY("zend_test.limit_copy_file_range", "-1", PHP_INI_ALL, OnUpdateLong, limit_copy_file_range, zend_zend_test_globals, zend_test_globals)
655+
#endif
653656
STD_PHP_INI_ENTRY("zend_test.quantity_value", "0", PHP_INI_ALL, OnUpdateLong, quantity_value, zend_zend_test_globals, zend_test_globals)
654657
STD_PHP_INI_ENTRY("zend_test.str_test", "", PHP_INI_ALL, OnUpdateStr, str_test, zend_zend_test_globals, zend_test_globals)
655658
STD_PHP_INI_ENTRY("zend_test.not_empty_str_test", "val", PHP_INI_ALL, OnUpdateStrNotEmpty, not_empty_str_test, zend_zend_test_globals, zend_test_globals)
@@ -930,3 +933,17 @@ PHP_ZEND_TEST_API void bug_gh9090_void_int_char_var(int i, char *fmt, ...) {
930933

931934
va_end(args);
932935
}
936+
937+
#ifdef HAVE_COPY_FILE_RANGE
938+
/**
939+
* This function allows us to simulate early return of copy_file_range by setting the limit_copy_file_range ini setting.
940+
*/
941+
PHP_ZEND_TEST_API ssize_t copy_file_range(int fd_in, off64_t *off_in, int fd_out, off64_t *off_out, size_t len, unsigned int flags)
942+
{
943+
ssize_t (*original_copy_file_range)(int, off64_t *, int, off64_t *, size_t, unsigned int) = dlsym(RTLD_NEXT, "copy_file_range");
944+
if (zend_test_globals.limit_copy_file_range >= Z_L(0)) {
945+
len = zend_test_globals.limit_copy_file_range;
946+
}
947+
return original_copy_file_range(fd_in, off_in, fd_out, off_out, len, flags);
948+
}
949+
#endif

0 commit comments

Comments
 (0)