summaryrefslogtreecommitdiffstats
path: root/44.patch
diff options
context:
space:
mode:
Diffstat (limited to '44.patch')
-rw-r--r--44.patch197
1 files changed, 197 insertions, 0 deletions
diff --git a/44.patch b/44.patch
new file mode 100644
index 0000000..e627247
--- /dev/null
+++ b/44.patch
@@ -0,0 +1,197 @@
+From aa0e74ca7f9fdff5fb25dc990a72005a8bfc018e Mon Sep 17 00:00:00 2001
+From: Ben Allison <ben1120@gmail.com>
+Date: Mon, 14 Jan 2019 13:03:17 -0800
+Subject: [PATCH] Support strict_types=1 for overridden functions Fixes #43
+
+---
+ tests/issue_043.phpt | 22 ++++++++++++
+ timecop_php7.c | 84 ++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 106 insertions(+)
+ create mode 100644 tests/issue_043.phpt
+
+diff --git a/tests/issue_043.phpt b/tests/issue_043.phpt
+new file mode 100644
+index 0000000..9e4fa0b
+--- /dev/null
++++ b/tests/issue_043.phpt
+@@ -0,0 +1,22 @@
++--TEST--
++Check for issue #43 (Overridden functions ignore declare(strict_types=1))
++--SKIPIF--
++<?php
++$required_version = "7.0";
++$required_func = array("strtotime");
++include(__DIR__."/tests-skipcheck.inc.php");
++--INI--
++date.timezone=GMT
++timecop.func_override=1
++--FILE--
++<?php
++declare(strict_types=1);
++
++try {
++ strtotime(null);
++ echo "No error thrown!";
++} catch (TypeError $e) {
++ echo $e->getMessage();
++}
++--EXPECT--
++timecop_strtotime() expects parameter 1 to be string, null given
+diff --git a/timecop_php7.c b/timecop_php7.c
+index 8d7faec..0a0dda7 100644
+--- a/timecop_php7.c
++++ b/timecop_php7.c
+@@ -1088,6 +1088,17 @@ PHP_FUNCTION(timecop_time)
+ Get UNIX timestamp for a date */
+ PHP_FUNCTION(timecop_mktime)
+ {
++ zend_long hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0;
++ ZEND_PARSE_PARAMETERS_START(0, 6)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(hou)
++ Z_PARAM_LONG(min)
++ Z_PARAM_LONG(sec)
++ Z_PARAM_LONG(mon)
++ Z_PARAM_LONG(day)
++ Z_PARAM_LONG(yea)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_MKTIME("mktime", "date");
+ }
+ /* }}} */
+@@ -1096,6 +1107,17 @@ PHP_FUNCTION(timecop_mktime)
+ Get UNIX timestamp for a GMT date */
+ PHP_FUNCTION(timecop_gmmktime)
+ {
++ zend_long hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0;
++ ZEND_PARSE_PARAMETERS_START(0, 6)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(hou)
++ Z_PARAM_LONG(min)
++ Z_PARAM_LONG(sec)
++ Z_PARAM_LONG(mon)
++ Z_PARAM_LONG(day)
++ Z_PARAM_LONG(yea)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_MKTIME("gmmktime", "gmdate");
+ }
+ /* }}} */
+@@ -1104,6 +1126,14 @@ PHP_FUNCTION(timecop_gmmktime)
+ Format a local date/time */
+ PHP_FUNCTION(timecop_date)
+ {
++ zend_string *format;
++ zend_long ts;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(format)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(ts)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("date", 1);
+ }
+ /* }}} */
+@@ -1112,6 +1142,14 @@ PHP_FUNCTION(timecop_date)
+ Format a GMT date/time */
+ PHP_FUNCTION(timecop_gmdate)
+ {
++ zend_string *format;
++ zend_long ts;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(format)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(ts)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("gmdate", 1);
+ }
+ /* }}} */
+@@ -1120,6 +1158,14 @@ PHP_FUNCTION(timecop_gmdate)
+ Format a local time/date as integer */
+ PHP_FUNCTION(timecop_idate)
+ {
++ zend_string *format;
++ zend_long ts;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(format)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(ts)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("idate", 1);
+ }
+ /* }}} */
+@@ -1128,6 +1174,12 @@ PHP_FUNCTION(timecop_idate)
+ Get date/time information */
+ PHP_FUNCTION(timecop_getdate)
+ {
++ zend_long ts;
++ ZEND_PARSE_PARAMETERS_START(0, 1)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(ts)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("getdate", 0);
+ }
+ /* }}} */
+@@ -1137,6 +1189,14 @@ PHP_FUNCTION(timecop_getdate)
+ the associative_array argument is set to 1 other wise it is a regular array */
+ PHP_FUNCTION(timecop_localtime)
+ {
++ zend_long timestamp;
++ zend_bool associative;
++ ZEND_PARSE_PARAMETERS_START(0, 2)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(timestamp)
++ Z_PARAM_BOOL(associative)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("localtime", 0);
+ }
+ /* }}} */
+@@ -1145,6 +1205,14 @@ PHP_FUNCTION(timecop_localtime)
+ Convert string representation of date and time to a timestamp */
+ PHP_FUNCTION(timecop_strtotime)
+ {
++ zend_string *times;
++ zend_long preset_ts;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(times)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(preset_ts)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("strtotime", 1);
+ }
+ /* }}} */
+@@ -1153,6 +1221,14 @@ PHP_FUNCTION(timecop_strtotime)
+ Format a local time/date according to locale settings */
+ PHP_FUNCTION(timecop_strftime)
+ {
++ zend_string *format;
++ zend_long timestamp;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(format)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(timestamp)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("strftime", 1);
+ }
+ /* }}} */
+@@ -1161,6 +1237,14 @@ PHP_FUNCTION(timecop_strftime)
+ Format a GMT/UCT time/date according to locale settings */
+ PHP_FUNCTION(timecop_gmstrftime)
+ {
++ zend_string *format;
++ zend_long timestamp = 0;
++ ZEND_PARSE_PARAMETERS_START(1, 2)
++ Z_PARAM_STR(format)
++ Z_PARAM_OPTIONAL
++ Z_PARAM_LONG(timestamp)
++ ZEND_PARSE_PARAMETERS_END_EX(RETURN_FALSE);
++
+ TIMECOP_CALL_FUNCTION("gmstrftime", 1);
+ }
+ /* }}} */