summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemi Collet <fedora@famillecollet.com>2015-06-10 17:26:59 +0200
committerRemi Collet <fedora@famillecollet.com>2015-06-10 17:26:59 +0200
commita895479719295830d96bc61225cccfca2a180edf (patch)
treefb512f75a16ce14c4786fe1d2941615fd9759c9d
parent937960bc0e4f0a7f0f53f5987fea3746dff0b376 (diff)
php 5.4: add some patch to improve test results
-rw-r--r--failed.txt27
-rw-r--r--php-5.4.42-datetests-1.patch258
-rw-r--r--php-5.4.42-datetests-2.patch54
-rw-r--r--php-5.4.42-oldpcre.patch39
-rw-r--r--php.spec14
5 files changed, 370 insertions, 22 deletions
diff --git a/failed.txt b/failed.txt
index 1214dea..2416368 100644
--- a/failed.txt
+++ b/failed.txt
@@ -2,32 +2,15 @@
$ grep -r 'Tests failed' /var/lib/mock/scl54*/build.log
-/var/lib/mock/scl54fc19x/build.log:Tests failed : 4 ( 0.0%) ( 0.1%)
- Bug #37911 (preg_replace_callback ignores named groups) [ext/pcre/tests/bug37911.phpt]
- preg_grep() 2nd test [ext/pcre/tests/grep2.phpt]
- preg_match() flags 3 [ext/pcre/tests/match_flags3.phpt]
- Test setlocale() function : usage variations - Setting all available locales in the platform [ext/standard/tests/strings/setlocale_variation2.phpt]
-
-/var/lib/mock/scl54fc20x/build.log:Tests failed : 4 ( 0.0%) ( 0.1%)
- idem f19
-
-/var/lib/mock/scl54fc21x/build.log:Tests failed : 10 ( 0.1%) ( 0.1%)
- Test DateTimeZone::getTransitions() function : basic functionality [ext/date/tests/DateTimeZone_getTransitions_basic1.phpt]
- DateTime::add() -- massive [ext/date/tests/DateTime_add-massive.phpt]
- DateTime::diff() -- massive [ext/date/tests/DateTime_diff-massive.phpt]
- DateTime::sub() -- massive [ext/date/tests/DateTime_sub-massive.phpt]
- Bug #48058 (Year formatter goes wrong with out-of-int range) [ext/date/tests/bug48058.phpt]
- Test getdate() function : usage variation - Passing high positive and negative float values to timestamp. [ext/date/tests/getdate_variation7.phpt]
- mktime() [3] (64-bit) [ext/date/tests/mktime-3-64bit.phpt]
- Test timezone_transitions_get() function : basic functionality [ext/date/tests/timezone_transitions_get_basic1.phpt]
- Test setlocale() function : usage variations - Setting all available locales in the platform [ext/standard/tests/strings/setlocale_variation2.phpt]
+/var/lib/mock/scl54fc19x/build.log:Tests failed : 0 ( 0.0%) ( 0.0%)
+/var/lib/mock/scl54fc20x/build.log:Tests failed : 0 ( 0.0%) ( 0.0%)
+/var/lib/mock/scl54fc21x/build.log:Tests failed : 1 ( 0.0%) ( 0.0%)
Test strptime() function : basic functionality [ext/standard/tests/time/strptime_basic.phpt]
-/var/lib/mock/scl54fc22x/build.log:Tests failed : 10 ( 0.1%) ( 0.1%)
+/var/lib/mock/scl54fc22x/build.log:Tests failed : 1 ( 0.0%) ( 0.0%)
idem f21
/var/lib/mock/scl54el6x/build.log:Tests failed : 1 ( 0.0%) ( 0.0%)
Bug #32001 (xml_parse*() goes into infinite loop when autodetection in effect), using UTF-* [ext/xml/tests/bug32001.phpt]
-/var/lib/mock/scl54el7x/build.log:Tests failed : 4 ( 0.0%) ( 0.1%)
- idem f19
+/var/lib/mock/scl54el7x/build.log:Tests failed : 0 ( 0.0%) ( 0.0%)
diff --git a/php-5.4.42-datetests-1.patch b/php-5.4.42-datetests-1.patch
new file mode 100644
index 0000000..28a6109
--- /dev/null
+++ b/php-5.4.42-datetests-1.patch
@@ -0,0 +1,258 @@
+From c39e777722f9b566ecff521602fb49ea20bb2961 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 18 Apr 2015 07:47:47 +0200
+Subject: [PATCH] Make date transitions tests more flexible
+
+zic in recent glibc (2.20) introduce a new transitionn
+so use a range to avoid failure when total number
+of transitions is different (243/244)
+---
+ ext/date/tests/DateTimeZone_getTransitions_basic1.phpt | 6 +++---
+ ext/date/tests/timezone_transitions_get_basic1.phpt | 10 +++++-----
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
+index f3640d1..d178080 100644
+--- a/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
++++ b/ext/date/tests/DateTimeZone_getTransitions_basic1.phpt
+@@ -16,7 +16,7 @@ date_default_timezone_set("Europe/London");
+ // Create a DateTimeZone object
+ $tz = new DateTimeZone("Europe/London");
+
+-$tran = $tz->getTransitions();
++$tran = $tz->getTransitions(-306972000, -37241999);
+
+ if (!is_array($tran)) {
+ echo "TEST FAILED: Expected an array\n";
+@@ -25,14 +25,14 @@ if (!is_array($tran)) {
+ echo "\n-- Total number of transitions: " . count($tran). " --\n";
+
+ echo "\n-- Format a sample entry for Spring 1963 --\n";
+-var_dump( $tran[97] );
++var_dump( $tran[6] );
+
+ ?>
+ ===DONE===
+ --EXPECT--
+ *** Testing DateTimeZone::getTransitions() : basic functionality ***
+
+--- Total number of transitions: 243 --
++-- Total number of transitions: 18 --
+
+ -- Format a sample entry for Spring 1963 --
+ array(5) {
+diff --git a/ext/date/tests/timezone_transitions_get_basic1.phpt b/ext/date/tests/timezone_transitions_get_basic1.phpt
+index eb6cf99..97c5f0c 100644
+--- a/ext/date/tests/timezone_transitions_get_basic1.phpt
++++ b/ext/date/tests/timezone_transitions_get_basic1.phpt
+@@ -18,24 +18,24 @@ $tz = timezone_open("Europe/London");
+
+ $tran = timezone_transitions_get($tz);
+
+-echo "\n-- Get all transitions --\n";
+-$tran = timezone_transitions_get($tz);
++echo "\n-- Get all 60s transitions --\n";
++$tran = timezone_transitions_get($tz, -306972000, -37241999);
+ var_dump( gettype($tran) );
+
+ echo "\n-- Total number of transitions: " . count($tran). " --\n";
+
+ echo "\n-- Format a sample entry pfor Spring 1963 --\n";
+-var_dump( $tran[97] );
++var_dump( $tran[6] );
+
+ ?>
+ ===DONE===
+ --EXPECT--
+ *** Testing timezone_transitions_get() : basic functionality ***
+
+--- Get all transitions --
++-- Get all 60s transitions --
+ string(5) "array"
+
+--- Total number of transitions: 243 --
++-- Total number of transitions: 18 --
+
+ -- Format a sample entry pfor Spring 1963 --
+ array(5) {
+--
+2.1.4
+
+From ba41b340c227ccfa61ba7b52d5d8cd07be512340 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 18 Apr 2015 09:11:39 +0200
+Subject: [PATCH] relax bigbang content (new zic)
+
+---
+ ext/date/tests/bug48058.phpt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/ext/date/tests/bug48058.phpt b/ext/date/tests/bug48058.phpt
+index 46a1918..87d2190 100644
+--- a/ext/date/tests/bug48058.phpt
++++ b/ext/date/tests/bug48058.phpt
+@@ -20,10 +20,10 @@ array(5) {
+ ["time"]=>
+ string(%d) "%s"
+ ["offset"]=>
+- int(3600)
++ int(%s)
+ ["isdst"]=>
+- bool(true)
++ bool(%s)
+ ["abbr"]=>
+- string(3) "BST"
++ string(%d) "%s"
+ }
+ 10000002008-02-28T12:00:00+0000
+--
+2.1.4
+
+From 194e64982e4408ba54cec143612e1a1aaa0fb937 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 18 Apr 2015 09:28:29 +0200
+Subject: [PATCH] relax test for date < INT32_MIN (new zic)
+
+---
+ ext/date/tests/mktime-3-64bit.phpt | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/ext/date/tests/mktime-3-64bit.phpt b/ext/date/tests/mktime-3-64bit.phpt
+index a3649cd..cbb441f 100644
+--- a/ext/date/tests/mktime-3-64bit.phpt
++++ b/ext/date/tests/mktime-3-64bit.phpt
+@@ -24,7 +24,7 @@ foreach ($tzs as $tz) {
+ echo "\n";
+ }
+ ?>
+---EXPECT--
++--EXPECTF--
+ America/Toronto
+ Y: 0 - January 2000-01-01T01:01:01-0500
+ Y: 69 - January 2069-01-01T01:01:01-0500
+@@ -32,11 +32,11 @@ Y: 70 - January 1970-01-01T01:01:01-0500
+ Y: 71 - January 1971-01-01T01:01:01-0500
+ Y: 99 - January 1999-01-01T01:01:01-0500
+ Y: 100 - January 2000-01-01T01:01:01-0500
+-Y: 101 - January 0101-01-01T01:01:01-0500
+-Y: 105 - January 0105-01-01T01:01:01-0500
+-Y: 110 - January 0110-01-01T01:01:01-0500
+-Y: 1900 - January 1900-01-01T01:01:01-0500
+-Y: 1901 - January 1901-01-01T01:01:01-0500
++Y: 101 - January 0101-01-01T01:01:01-0%d
++Y: 105 - January 0105-01-01T01:01:01-0%d
++Y: 110 - January 0110-01-01T01:01:01-0%d
++Y: 1900 - January 1900-01-01T01:01:01-0%d
++Y: 1901 - January 1901-01-01T01:01:01-0%d
+ Y: 1902 - January 1902-01-01T01:01:01-0500
+ Y: 1999 - January 1999-01-01T01:01:01-0500
+ Y: 2000 - January 2000-01-01T01:01:01-0500
+@@ -49,11 +49,11 @@ Y: 70 - January 1970-01-01T01:01:01+0100
+ Y: 71 - January 1971-01-01T01:01:01+0100
+ Y: 99 - January 1999-01-01T01:01:01+0100
+ Y: 100 - January 2000-01-01T01:01:01+0100
+-Y: 101 - January 0101-01-01T01:01:01+0100
+-Y: 105 - January 0105-01-01T01:01:01+0100
+-Y: 110 - January 0110-01-01T01:01:01+0100
+-Y: 1900 - January 1900-01-01T01:01:01+0100
+-Y: 1901 - January 1901-01-01T01:01:01+0100
++Y: 101 - January 0101-01-01T01:01:01+0%d
++Y: 105 - January 0105-01-01T01:01:01+0%d
++Y: 110 - January 0110-01-01T01:01:01+0%d
++Y: 1900 - January 1900-01-01T01:01:01+0%d
++Y: 1901 - January 1901-01-01T01:01:01+0%d
+ Y: 1902 - January 1902-01-01T01:01:01+0100
+ Y: 1999 - January 1999-01-01T01:01:01+0100
+ Y: 2000 - January 2000-01-01T01:01:01+0100
+--
+2.1.4
+
+From c1e84a3bdee216d8951fce8678daede24798ea94 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 18 Apr 2015 09:37:06 +0200
+Subject: [PATCH] ignore second value for huge timestamp test (new zic)
+
+---
+ ext/date/tests/getdate_variation7.phpt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ext/date/tests/getdate_variation7.phpt b/ext/date/tests/getdate_variation7.phpt
+index 2088fa1..c757ac7 100644
+--- a/ext/date/tests/getdate_variation7.phpt
++++ b/ext/date/tests/getdate_variation7.phpt
+@@ -27,7 +27,7 @@ var_dump( getdate($timestamp) );
+ -- Testing getdate\(\) function by passing float 12.3456789000e10 value to timestamp --
+ array\(11\) {
+ \["seconds"\]=>
+- int\((36|0)\)
++ int\((.+)\)
+ \["minutes"\]=>
+ int\((43|0)\)
+ \["hours"\]=>
+@@ -53,7 +53,7 @@ array\(11\) {
+ -- Testing getdate\(\) function by passing float -12.3456789000e10 value to timestamp --
+ array\(11\) {
+ \["seconds"\]=>
+- int\((44|12|20)\)
++ int\((.+)\)
+ \["minutes"\]=>
+ int\((39|23)\)
+ \["hours"\]=>
+--
+2.1.4
+
+From 97fcbf041af509bcb5c129b15ba5b6ce98f81cb6 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Sat, 18 Apr 2015 10:00:15 +0200
+Subject: [PATCH] relax tests with huge year (new zic)
+
+---
+ ext/date/tests/DateTime_add-massive.phpt | 6 +++---
+ ext/date/tests/DateTime_diff-massive.phpt | 6 +++---
+ ext/date/tests/DateTime_sub-massive.phpt | 6 +++---
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+diff --git a/ext/date/tests/DateTime_add-massive.phpt b/ext/date/tests/DateTime_add-massive.phpt
+index ca5bef9..6093d05 100644
+--- a/ext/date/tests/DateTime_add-massive.phpt
++++ b/ext/date/tests/DateTime_add-massive.phpt
+@@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_ADD);
+ require 'DateTime_data-massive.inc';
+
+ ?>
+---EXPECT--
+-test_massive_positive: ADD: -333333-01-01 16:18:02 EST + P+666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 EST**
+-test_massive_negative: ADD: 333333-01-01 16:18:02 EST + P-666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 EST**
++--EXPECTF--
++test_massive_positive: ADD: -333333-01-01 16:18:02 %s + P+666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 %s**
++test_massive_negative: ADD: 333333-01-01 16:18:02 %s + P-666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 %s**
+diff --git a/ext/date/tests/DateTime_diff-massive.phpt b/ext/date/tests/DateTime_diff-massive.phpt
+index 2199f84..12a7d0f 100644
+--- a/ext/date/tests/DateTime_diff-massive.phpt
++++ b/ext/date/tests/DateTime_diff-massive.phpt
+@@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_DIFF);
+ require 'DateTime_data-massive.inc';
+
+ ?>
+---EXPECT--
+-test_massive_positive: DIFF: 333333-01-01 16:18:02 EST - -333333-01-01 16:18:02 EST = **P+666666Y0M0DT0H0M0S**
+-test_massive_negative: DIFF: -333333-01-01 16:18:02 EST - 333333-01-01 16:18:02 EST = **P-666666Y0M0DT0H0M0S**
++--EXPECTF--
++test_massive_positive: DIFF: 333333-01-01 16:18:02 %s - -333333-01-01 16:18:02 %s = **P+666666Y0M0DT0H%s**
++test_massive_negative: DIFF: -333333-01-01 16:18:02 %s - 333333-01-01 16:18:02 %s = **P-666666Y0M0DT0H%s**
+diff --git a/ext/date/tests/DateTime_sub-massive.phpt b/ext/date/tests/DateTime_sub-massive.phpt
+index a0520ec..e143056 100644
+--- a/ext/date/tests/DateTime_sub-massive.phpt
++++ b/ext/date/tests/DateTime_sub-massive.phpt
+@@ -10,6 +10,6 @@ define('PHPT_DATETIME_SHOW', PHPT_DATETIME_SHOW_SUB);
+ require 'DateTime_data-massive.inc';
+
+ ?>
+---EXPECT--
+-test_massive_positive: SUB: 333333-01-01 16:18:02 EST - P+666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 EST**
+-test_massive_negative: SUB: -333333-01-01 16:18:02 EST - P-666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 EST**
++--EXPECTF--
++test_massive_positive: SUB: 333333-01-01 16:18:02 %s - P+666666Y0M0DT0H0M0S = **-333333-01-01 16:18:02 %s**
++test_massive_negative: SUB: -333333-01-01 16:18:02 %s - P-666666Y0M0DT0H0M0S = **333333-01-01 16:18:02 %s**
+--
+2.1.4
diff --git a/php-5.4.42-datetests-2.patch b/php-5.4.42-datetests-2.patch
new file mode 100644
index 0000000..fcddbc7
--- /dev/null
+++ b/php-5.4.42-datetests-2.patch
@@ -0,0 +1,54 @@
+Backport various fix from 5.6
+
+From 7cbd8f8b8a662c1e74cb1c97dac6f606f8f477c9 Mon Sep 17 00:00:00 2001
+From: krakjoe <joe.watkins@live.co.uk>
+Date: Thu, 21 Aug 2014 10:03:48 +0100
+Subject: [PATCH] remove bogus locale use from test
+
+---
+ ext/standard/tests/strings/setlocale_variation2.phpt | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/ext/standard/tests/strings/setlocale_variation2.phpt b/ext/standard/tests/strings/setlocale_variation2.phpt
+index 038ba58..10ae22f 100644
+--- a/ext/standard/tests/strings/setlocale_variation2.phpt
++++ b/ext/standard/tests/strings/setlocale_variation2.phpt
+@@ -18,8 +18,11 @@ if (substr(PHP_OS, 0, 3) == 'WIN') {
+ /* setlocale() to set all available locales in the system and check the success count */
+ echo "*** Testing setlocale() : usage variations ***\n";
+
+-function good_locale($locale) {
+- return $locale !== 'tt_RU@iqtelif.UTF-8';
++function good_locale($locale) {
++ /**
++ * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/show_bug.cgi?id=532487
++ **/
++ return $locale !== 'tt_RU@iqtelif.UTF-8' && substr($locale, 0, 5) !== "no_NO";
+ }
+
+ /* Prototype : array list_system_locales( void )
+From 3e6f17673338034724c8b637c214b53a51a9db14 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@php.net>
+Date: Wed, 1 Oct 2014 10:14:14 +0200
+Subject: [PATCH] only no_NO.ISO-8859-1 have to be ignored
+
+---
+ ext/standard/tests/strings/setlocale_variation2.phpt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/ext/standard/tests/strings/setlocale_variation2.phpt b/ext/standard/tests/strings/setlocale_variation2.phpt
+index 10ae22f..5ebdfe8 100644
+--- a/ext/standard/tests/strings/setlocale_variation2.phpt
++++ b/ext/standard/tests/strings/setlocale_variation2.phpt
+@@ -20,9 +20,9 @@ echo "*** Testing setlocale() : usage variations ***\n";
+
+ function good_locale($locale) {
+ /**
+- * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/show_bug.cgi?id=532487
++ * Note: no_NO is a bogus locale and should not be used, see https://bugzilla.redhat.com/971416
+ **/
+- return $locale !== 'tt_RU@iqtelif.UTF-8' && substr($locale, 0, 5) !== "no_NO";
++ return $locale !== 'tt_RU@iqtelif.UTF-8' && $locale !== 'no_NO.ISO-8859-1';
+ }
+
+ /* Prototype : array list_system_locales( void )
diff --git a/php-5.4.42-oldpcre.patch b/php-5.4.42-oldpcre.patch
new file mode 100644
index 0000000..df6edb2
--- /dev/null
+++ b/php-5.4.42-oldpcre.patch
@@ -0,0 +1,39 @@
+diff -up ./ext/pcre/tests/bug37911.phpt.pcre834 ./ext/pcre/tests/bug37911.phpt
+--- ./ext/pcre/tests/bug37911.phpt.pcre834 2014-03-26 14:10:18.285452752 +0100
++++ ./ext/pcre/tests/bug37911.phpt 2014-03-26 14:10:40.028526763 +0100
+@@ -37,5 +37,5 @@ array(3) {
+ string(4) "blub"
+ }
+
+-Warning: preg_replace_callback(): Compilation failed: group name must start with a non-digit at offset %d in %sbug37911.php on line %d
++Warning: preg_replace_callback(): Numeric named subpatterns are not allowed in %sbug37911.php on line %d
+ NULL
+diff -up ./ext/pcre/tests/grep2.phpt.pcre834 ./ext/pcre/tests/grep2.phpt
+--- ./ext/pcre/tests/grep2.phpt.pcre834 2014-03-26 14:08:26.583072531 +0100
++++ ./ext/pcre/tests/grep2.phpt 2014-03-26 14:09:09.345218089 +0100
+@@ -40,12 +40,6 @@ array(1) {
+ string(1) "1"
+ }
+ bool(true)
+-array(3) {
+- [5]=>
+- string(1) "a"
+- ["xyz"]=>
+- string(2) "q6"
+- [6]=>
+- string(3) "h20"
++array(0) {
+ }
+-bool(false)
++bool(true)
+diff -up ./ext/pcre/tests/match_flags3.phpt.pcre834 ./ext/pcre/tests/match_flags3.phpt
+--- ./ext/pcre/tests/match_flags3.phpt.pcre834 2014-03-26 14:06:48.792739665 +0100
++++ ./ext/pcre/tests/match_flags3.phpt 2014-03-26 14:07:31.820886128 +0100
+@@ -42,5 +42,5 @@ array(1) {
+ }
+ }
+
+-Warning: preg_match(): Compilation failed: group name must start with a non-digit at offset %d in %smatch_flags3.php on line %d
++Warning: preg_match(): Numeric named subpatterns are not allowed in %smatch_flags3.php on line %d
+ bool(false)
+diff -up ./ext/standard/tests/strings/setlocale_variation2.phpt.pcre834 ./ext/standard/tests/strings/setlocale_variation2.phpt
diff --git a/php.spec b/php.spec
index 8159deb..891ee44 100644
--- a/php.spec
+++ b/php.spec
@@ -169,6 +169,12 @@ Patch102: php-5.4.39-bug50444.patch
# Security fixes (200+)
# Fixes for tests (300+)
+# Backported from 5.5
+Patch300: php-5.4.42-datetests-1.patch
+# no_NO issue
+Patch301: php-5.4.42-datetests-2.patch
+# Revert changes for pcre < 8.34
+Patch302: php-5.4.42-oldpcre.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -799,6 +805,14 @@ support for using the enchant library to PHP.
# security patches
# Fixes for tests
+%patch300 -p1 -b .datetests1
+%patch301 -p1 -b .datetests2
+%if %{with_libpcre}
+%if 0%{?fedora} < 21
+# Only apply when system libpcre < 8.34
+%patch302 -p1 -b .pcre834
+%endif
+%endif
# Prevent %%doc confusion over LICENSE files
cp Zend/LICENSE Zend/ZEND_LICENSE