Skip to content

Commit f4e5010

Browse files
committed
Show the 'have_special_relative' property in var_dumps, and disallow serialization if set
1 parent 76e852e commit f4e5010

26 files changed

+71
-5
lines changed

ext/date/php_date.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2093,8 +2093,9 @@ static void date_interval_object_to_hash(php_interval_obj *intervalobj, HashTabl
20932093
PHP_DATE_INTERVAL_ADD_PROPERTY("special_type", special.type);
20942094
PHP_DATE_INTERVAL_ADD_PROPERTY("special_amount", special.amount);
20952095
PHP_DATE_INTERVAL_ADD_PROPERTY("have_weekday_relative", have_weekday_relative);
2096-
PHP_DATE_INTERVAL_ADD_PROPERTY("have_special_relative", have_special_relative);
20972096
}
2097+
/* Records whether this is a special relative interval that can't be serialized */
2098+
PHP_DATE_INTERVAL_ADD_PROPERTY("have_special_relative", have_special_relative);
20982099

20992100
#undef PHP_DATE_INTERVAL_ADD_PROPERTY
21002101
}
@@ -4222,6 +4223,10 @@ PHP_METHOD(DateInterval, __serialize)
42224223
intervalobj = Z_PHPINTERVAL_P(object);
42234224
DATE_CHECK_INITIALIZED(intervalobj->initialized, DateInterval);
42244225

4226+
if (intervalobj->diff->have_special_relative) {
4227+
zend_throw_exception_ex(NULL, 0, "Serializing special relative time specifications is not supported");
4228+
}
4229+
42254230
array_init(return_value);
42264231
myht = Z_ARRVAL_P(return_value);
42274232
date_interval_object_to_hash(intervalobj, myht, true);

ext/date/tests/DatePeriod_set_state.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ object(DatePeriod)#%d (6) {
5353
int(0)
5454
["days"]=>
5555
bool(false)
56+
["have_special_relative"]=>
57+
int(0)
5658
}
5759
["recurrences"]=>
5860
int(25)

ext/date/tests/bug45682.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,6 @@ object(DateInterval)#%d (%d) {
3232
int(0)
3333
["days"]=>
3434
int(3)
35+
["have_special_relative"]=>
36+
int(0)
3537
}

ext/date/tests/bug48678.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ DateInterval Object
1919
[f] => 0
2020
[invert] => 0
2121
[days] =>
22+
[have_special_relative] => 0
2223
)
2324
DateInterval Object
2425
(
@@ -31,4 +32,5 @@ DateInterval Object
3132
[f] => 0
3233
[invert] => 0
3334
[days] =>
35+
[have_special_relative] => 0
3436
)

ext/date/tests/bug49081.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ DateInterval Object
2020
[f] => 0
2121
[invert] => 0
2222
[days] => 30
23+
[have_special_relative] => 0
2324
)

ext/date/tests/bug49778.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ object(DateInterval)#%d (%d) {
2727
int(0)
2828
["days"]=>
2929
bool(false)
30+
["have_special_relative"]=>
31+
int(0)
3032
}
3133
7
3234
(unknown)

ext/date/tests/bug52113.phpt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ object(DateInterval)#%d (%d) {
5252
int(0)
5353
["days"]=>
5454
int(0)
55+
["have_special_relative"]=>
56+
int(0)
5557
}
5658
string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}"
5759
\DateInterval::__set_state(array(
@@ -64,6 +66,7 @@ string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h"
6466
'f' => 0.0,
6567
'invert' => 0,
6668
'days' => 0,
69+
'have_special_relative' => 0,
6770
))object(DateInterval)#%d (%d) {
6871
["y"]=>
6972
int(0)
@@ -83,6 +86,8 @@ string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h"
8386
int(0)
8487
["days"]=>
8588
int(0)
89+
["have_special_relative"]=>
90+
int(0)
8691
}
8792
object(DatePeriod)#%d (6) {
8893
["start"]=>
@@ -118,6 +123,8 @@ object(DatePeriod)#%d (6) {
118123
int(0)
119124
["days"]=>
120125
int(0)
126+
["have_special_relative"]=>
127+
int(0)
121128
}
122129
["recurrences"]=>
123130
int(3)
@@ -143,6 +150,8 @@ object(DateInterval)#%d (%d) {
143150
int(1)
144151
["days"]=>
145152
int(2400)
153+
["have_special_relative"]=>
154+
int(0)
146155
}
147156
object(DatePeriod)#%d (6) {
148157
["start"]=>
@@ -178,6 +187,8 @@ object(DatePeriod)#%d (6) {
178187
int(0)
179188
["days"]=>
180189
int(0)
190+
["have_special_relative"]=>
191+
int(0)
181192
}
182193
["recurrences"]=>
183194
int(3)

ext/date/tests/bug52738.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@ di Object
3131
[f] => 0
3232
[invert] => 0
3333
[days] =>
34+
[have_special_relative] => 0
3435
)

ext/date/tests/bug52808.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ object(DateInterval)#%d (%d) {
4444
int(1)
4545
["days"]=>
4646
int(437)
47+
["have_special_relative"]=>
48+
int(0)
4749
}
4850
object(DateInterval)#%d (%d) {
4951
["y"]=>
@@ -64,6 +66,8 @@ object(DateInterval)#%d (%d) {
6466
int(0)
6567
["days"]=>
6668
int(294)
69+
["have_special_relative"]=>
70+
int(0)
6771
}
6872
object(DateInterval)#%d (%d) {
6973
["y"]=>
@@ -84,6 +88,8 @@ object(DateInterval)#%d (%d) {
8488
int(0)
8589
["days"]=>
8690
int(294)
91+
["have_special_relative"]=>
92+
int(0)
8793
}
8894
Failed to parse interval (2007-05-11T15:30:00Z/)
8995
Failed to parse interval (2007-05-11T15:30:00Z)

ext/date/tests/bug53437.phpt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ object(DatePeriod)#%d (6) {
6969
int(0)
7070
["days"]=>
7171
bool(false)
72+
["have_special_relative"]=>
73+
int(0)
7274
}
7375
["recurrences"]=>
7476
int(3)
@@ -116,6 +118,8 @@ object(DatePeriod)#%d (6) {
116118
int(0)
117119
["days"]=>
118120
bool(false)
121+
["have_special_relative"]=>
122+
int(0)
119123
}
120124
["recurrences"]=>
121125
int(3)

ext/date/tests/bug53437_var2.phpt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Bug #53437 DateInterval basic serialization
2+
Bug #53437 (DateInterval basic serialization)
33
--FILE--
44
<?php
55
$di0 = new DateInterval('P2Y4DT6H8M');
@@ -31,6 +31,8 @@ object(DateInterval)#1 (%d) {
3131
int(0)
3232
["days"]=>
3333
bool(false)
34+
["have_special_relative"]=>
35+
int(0)
3436
}
3537
object(DateInterval)#2 (%d) {
3638
["y"]=>
@@ -51,4 +53,6 @@ object(DateInterval)#2 (%d) {
5153
int(0)
5254
["days"]=>
5355
bool(false)
56+
["have_special_relative"]=>
57+
int(0)
5458
}

ext/date/tests/bug53437_var4.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ object(DateInterval)#%d (%d) {
4040
int(0)
4141
["days"]=>
4242
int(2)
43+
["have_special_relative"]=>
44+
int(0)
4345
}
4446
int(0)
4547
int(0)

ext/date/tests/bug53437_var5.phpt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Bug #53437 DateInterval unserialize bad data, 64 bit
2+
Bug #53437 (DateInterval unserialize bad data, 64 bit)
33
--SKIPIF--
44
<?php if (PHP_INT_SIZE != 8) { die('skip true 64 bit only'); } ?>
55
--FILE--
@@ -30,4 +30,6 @@ object(DateInterval)#%d (%d) {
3030
int(0)
3131
["days"]=>
3232
int(0)
33+
["have_special_relative"]=>
34+
int(0)
3335
}

ext/date/tests/bug53437_var6.phpt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Bug #53437 DateInterval unserialize bad data, 64 bit
2+
Bug #53437 (DateInterval unserialize bad data, 64 bit)
33
--SKIPIF--
44
<?php if (PHP_INT_SIZE != 8) { die('skip true 64 bit only'); } ?>
55
--FILE--
@@ -30,4 +30,6 @@ object(DateInterval)#%d (%d) {
3030
int(0)
3131
["days"]=>
3232
int(0)
33+
["have_special_relative"]=>
34+
int(0)
3335
}

ext/date/tests/bug60774.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ object(DateInterval)#1 (%d) {
2727
int(0)
2828
["days"]=>
2929
bool(false)
30+
["have_special_relative"]=>
31+
int(0)
3032
}
3133
2
3234
(unknown)

ext/date/tests/bug66545.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,5 @@ DateInterval Object
2727
[f] => 0
2828
[invert] => 0
2929
[days] => 14
30+
[have_special_relative] => 0
3031
)

ext/date/tests/bug70153.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ DateInterval Object
2525
[f] => 0
2626
[invert] => 0
2727
[days] =>
28+
[have_special_relative] => 0
2829
)
2930
O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:1;s:1:"d";i:0;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";b:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}DateInterval Object
3031
(
@@ -37,6 +38,7 @@ O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:1;s:1:"d";i:0;s:1:"h";i:0;s:1:"i";
3738
[f] => 0
3839
[invert] => 0
3940
[days] =>
41+
[have_special_relative] => 0
4042
)
4143
bool(false)
4244
bool(false)

ext/date/tests/bug71700.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ object(DateInterval)#3 (%d) {
3131
int(0)
3232
["days"]=>
3333
int(30)
34+
["have_special_relative"]=>
35+
int(0)
3436
}

ext/date/tests/bug73091.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,6 @@ object(DateInterval)#%d (%d) {
3131
int(0)
3232
["days"]=>
3333
int(-1)
34+
["have_special_relative"]=>
35+
int(0)
3436
}

ext/date/tests/bug74274.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ DateInterval Object
2020
[f] => 0
2121
[invert] => 0
2222
[days] => 1
23+
[have_special_relative] => 0
2324
)

ext/date/tests/bug74524.phpt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,5 @@ DateInterval Object
2222
[f] => 0.920541
2323
[invert] => 1
2424
[days] => 227
25+
[have_special_relative] => 0
2526
)

ext/date/tests/bug77571.phpt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--TEST--
2-
Bug #77571 (DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00
2+
Bug #77571 (DateTime's diff DateInterval incorrect in timezones from UTC+01:00 to UTC+12:00)
33
--FILE--
44
<?php
55

@@ -23,4 +23,5 @@ DateInterval Object
2323
[f] => 0
2424
[invert] => 0
2525
[days] => 35
26+
[have_special_relative] => 0
2627
)

ext/date/tests/bug78452.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,6 @@ object(DateInterval)#3 (%d) {
2727
int(1)
2828
["days"]=>
2929
int(33)
30+
["have_special_relative"]=>
31+
int(0)
3032
}

ext/date/tests/bug79015.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,6 @@ object(DateInterval)#%d (%d) {
2525
int(0)
2626
["days"]=>
2727
bool(false)
28+
["have_special_relative"]=>
29+
int(0)
2830
}

ext/date/tests/date_diff1.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,6 @@ object(DateInterval)#%d (%d) {
4747
int(0)
4848
["days"]=>
4949
int(33)
50+
["have_special_relative"]=>
51+
int(0)
5052
}

ext/date/tests/date_time_fractions.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ object(DateInterval)#%d (%d) {
7777
int(0)
7878
["days"]=>
7979
int(0)
80+
["have_special_relative"]=>
81+
int(0)
8082
}
8183
2016-10-03 13:20:06.724934
8284
2016-10-03 13:20:07.103123

0 commit comments

Comments
 (0)