mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-15 21:16:38 +00:00
Compare commits
1489
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6bc1a14f56 | ||
|
|
ee626ccb51 | ||
|
|
629d7cf43f | ||
|
|
871fb78154 | ||
|
|
a11e0b5ef1 | ||
|
|
b436ad2af5 | ||
|
|
850998256c | ||
|
|
0709a0490f | ||
|
|
74cafe0840 | ||
|
|
cda82bc0a3 | ||
|
|
a8c006235c | ||
|
|
79dfb302b1 | ||
|
|
44297ddea8 | ||
|
|
ed30d91cd6 | ||
|
|
009f5a3937 | ||
|
|
c313af32a9 | ||
|
|
0c84a4d927 | ||
|
|
6e8654aae1 | ||
|
|
82f70c9493 | ||
|
|
c219c6f4a8 | ||
|
|
56bb90399e | ||
|
|
cdaff68610 | ||
|
|
4f6f150490 | ||
|
|
9eb6d36c39 | ||
|
|
693c9a7d2c | ||
|
|
d44cb7fa7b | ||
|
|
3265d023a4 | ||
|
|
601a77b3a3 | ||
|
|
52f6312866 | ||
|
|
58e96c4c10 | ||
|
|
0903f26151 | ||
|
|
d10beb67c3 | ||
|
|
c98dcd5a21 | ||
|
|
cb443c6e5a | ||
|
|
c5732112a9 | ||
|
|
7c166ddf86 | ||
|
|
15bcf9e38e | ||
|
|
46baad774f | ||
|
|
40ca697a67 | ||
|
|
4cb734b05f | ||
|
|
0bc0e57b85 | ||
|
|
de3c2038af | ||
|
|
49dbf804ad | ||
|
|
49c0823800 | ||
|
|
094a5717b1 | ||
|
|
93951f1931 | ||
|
|
eb6b99d7df | ||
|
|
d32dc5bda0 | ||
|
|
a2b7b84685 | ||
|
|
8e8b369bc2 | ||
|
|
1ef02490c3 | ||
|
|
dfa95b718f | ||
|
|
14fb4afd5c | ||
|
|
17864fc3e9 | ||
|
|
725217571e | ||
|
|
933c26de41 | ||
|
|
a4ae84d014 | ||
|
|
b24fd9a3d6 | ||
|
|
78e610b4f9 | ||
|
|
eae1072ccc | ||
|
|
2c36778e47 | ||
|
|
8ddcd35d17 | ||
|
|
8ed3a86161 | ||
|
|
d2c8a3bb63 | ||
|
|
d2c5721f41 | ||
|
|
9bf088ce36 | ||
|
|
1b002cf39f | ||
|
|
75fdefba0c | ||
|
|
6bef5f8e80 | ||
|
|
a719e16f7c | ||
|
|
65975bfc15 | ||
|
|
4b8911d062 | ||
|
|
f3f2d827db | ||
|
|
216d041717 | ||
|
|
d291b4351e | ||
|
|
4c6e1df9e2 | ||
|
|
a5f3e15114 | ||
|
|
3e45bc0a51 | ||
|
|
d27d7619be | ||
|
|
7e74ff0ff1 | ||
|
|
504e9e31f3 | ||
|
|
4dafc7a2fa | ||
|
|
ebd7c13e8b | ||
|
|
aeddf73dc4 | ||
|
|
5500a08ba3 | ||
|
|
cbd3a64136 | ||
|
|
ef3fcf2894 | ||
|
|
55eef07a71 | ||
|
|
4383f51c44 | ||
|
|
6f98a771e6 | ||
|
|
84a827e0d4 | ||
|
|
58d4b44ae7 | ||
|
|
5f12c71382 | ||
|
|
05c11fdfb2 | ||
|
|
c592304ac0 | ||
|
|
e506abc408 | ||
|
|
04add4c727 | ||
|
|
5a23201d82 | ||
|
|
b6a89efcda | ||
|
|
fc9970a6e9 | ||
|
|
d6a4586197 | ||
|
|
b4f76016fd | ||
|
|
bb691f155c | ||
|
|
5b4043554a | ||
|
|
bd6c862fee | ||
|
|
7ad1c3c5f2 | ||
|
|
7dd989fd4a | ||
|
|
c463e98e99 | ||
|
|
4fca731b0b | ||
|
|
7b70e5be45 | ||
|
|
9ca5652f70 | ||
|
|
c2cfc1eeee | ||
|
|
d4fbb3ca53 | ||
|
|
c5588fae3a | ||
|
|
a6ff74de28 | ||
|
|
f7d1d3ef44 | ||
|
|
8815fdf5e0 | ||
|
|
e22c9cd775 | ||
|
|
2cca49ac01 | ||
|
|
2f586e965e | ||
|
|
6b7144d0b8 | ||
|
|
e351aedbdc | ||
|
|
e8d2c9489d | ||
|
|
b865d176de | ||
|
|
7d4ea80b07 | ||
|
|
5941c1d28c | ||
|
|
25e7373009 | ||
|
|
2ae036f038 | ||
|
|
ed30473f7c | ||
|
|
2e1a2438b5 | ||
|
|
870bd0b99f | ||
|
|
7c92982b5b | ||
|
|
f361d9e4f0 | ||
|
|
12d54fa683 | ||
|
|
5e74c607a2 | ||
|
|
a95781d9bf | ||
|
|
b5228f0c6c | ||
|
|
1c46fc5a45 | ||
|
|
7c750656f1 | ||
|
|
e470e22e20 | ||
|
|
4e0f1992ed | ||
|
|
3e0e2bb49d | ||
|
|
5d75262062 | ||
|
|
48b4cb96e0 | ||
|
|
3f3509606d | ||
|
|
ae792a06b0 | ||
|
|
78ca1de763 | ||
|
|
6a8f688af2 | ||
|
|
66bad4f93b | ||
|
|
da1992fdb3 | ||
|
|
023144ffa9 | ||
|
|
39fa36a0be | ||
|
|
5709b64739 | ||
|
|
81729c1ece | ||
|
|
38f942b880 | ||
|
|
96a8399e2f | ||
|
|
8c086cae23 | ||
|
|
cbd9822ed9 | ||
|
|
1e352b3ae7 | ||
|
|
43369cef58 | ||
|
|
1790b05591 | ||
|
|
ec66c5be3d | ||
|
|
cdfed7f757 | ||
|
|
60e20922eb | ||
|
|
13f006ac69 | ||
|
|
c5fb061cbf | ||
|
|
fec9895fc3 | ||
|
|
8df326e003 | ||
|
|
a688c62f57 | ||
|
|
5babb6d10d | ||
|
|
5068511748 | ||
|
|
cbf6f5b538 | ||
|
|
a431a09f47 | ||
|
|
3eaf46af3e | ||
|
|
9b253882fc | ||
|
|
45a95f0898 | ||
|
|
57792acabc | ||
|
|
d1891c3d8a | ||
|
|
630254d55e | ||
|
|
c0e9579204 | ||
|
|
252b9e9fb1 | ||
|
|
f694c1f1db | ||
|
|
13f447eb64 | ||
|
|
3f9a4baa31 | ||
|
|
91b8c3b2b5 | ||
|
|
7d901eacbe | ||
|
|
56a147fbff | ||
|
|
e6c845cb2c | ||
|
|
7ba84b8807 | ||
|
|
17ff2f42ff | ||
|
|
a078b56326 | ||
|
|
b2fa0cb89d | ||
|
|
b6dff166bf | ||
|
|
7cf0e005fa | ||
|
|
9ad0ffbd33 | ||
|
|
614e0b29ac | ||
|
|
3dcf540547 | ||
|
|
46e5e63f94 | ||
|
|
97f0cf1208 | ||
|
|
9046eaa260 | ||
|
|
b1cac0f72c | ||
|
|
8a806d186e | ||
|
|
f3d0a26e13 | ||
|
|
18548c1041 | ||
|
|
cb70d99ee2 | ||
|
|
2df7386475 | ||
|
|
e095b94609 | ||
|
|
5787b56554 | ||
|
|
4223aa4d5e | ||
|
|
6e0af2f4d5 | ||
|
|
ba64553913 | ||
|
|
96489b4178 | ||
|
|
b8003b8461 | ||
|
|
169b207532 | ||
|
|
877ee65622 | ||
|
|
5298554fb6 | ||
|
|
3ca748d49c | ||
|
|
3d11fb35ae | ||
|
|
604f18c20d | ||
|
|
7f376183f8 | ||
|
|
78d8808f42 | ||
|
|
6895045565 | ||
|
|
790b0b9edf | ||
|
|
79d524dc1e | ||
|
|
2820e6c1fa | ||
|
|
7b281be1ee | ||
|
|
28421f4f19 | ||
|
|
e5f95ec3e4 | ||
|
|
559ab4b3f9 | ||
|
|
794845234e | ||
|
|
b154f188d1 | ||
|
|
dae5040b61 | ||
|
|
ef9646c867 | ||
|
|
fdfa403388 | ||
|
|
46a6bd7f9d | ||
|
|
112462d102 | ||
|
|
d3a651a39e | ||
|
|
96d9d6f0f1 | ||
|
|
66e555c66f | ||
|
|
54f3ff34b7 | ||
|
|
d07a46ebab | ||
|
|
b16f925e37 | ||
|
|
65f50e7e31 | ||
|
|
d101e113cf | ||
|
|
7fe60ada00 | ||
|
|
5e576be36f | ||
|
|
ffd41a503f | ||
|
|
dc5be15a6f | ||
|
|
ff9d0fcc78 | ||
|
|
24124518ab | ||
|
|
f458ff3dac | ||
|
|
5a6f0e3059 | ||
|
|
67583e7aa5 | ||
|
|
b85f1345a6 | ||
|
|
e2c110bebf | ||
|
|
32d078f8e7 | ||
|
|
52d53543ac | ||
|
|
9c2b6efb77 | ||
|
|
6ac8ffdfea | ||
|
|
7dc7882745 | ||
|
|
7efb0a14f4 | ||
|
|
807a0966a9 | ||
|
|
6c50fa955b | ||
|
|
652c7096b2 | ||
|
|
3fd433c07d | ||
|
|
2e3cd64566 | ||
|
|
35db4d21b0 | ||
|
|
4480c5eb5d | ||
|
|
0776e56437 | ||
|
|
ff0a238043 | ||
|
|
9f76195869 | ||
|
|
601f4cd129 | ||
|
|
c52bc49f50 | ||
|
|
e3569ae80a | ||
|
|
e57a60698b | ||
|
|
5436160dc6 | ||
|
|
5823a2d28a | ||
|
|
04d4811532 | ||
|
|
6e8a7d7b20 | ||
|
|
c5db57b495 | ||
|
|
4f46c4e90f | ||
|
|
51bca1b406 | ||
|
|
47fb655a56 | ||
|
|
a03f730875 | ||
|
|
b7ec6f90e0 | ||
|
|
6077df1a03 | ||
|
|
eaf3d32157 | ||
|
|
1379ad02e3 | ||
|
|
7180422fdc | ||
|
|
46b25155d2 | ||
|
|
72895cda6d | ||
|
|
f40ebf4171 | ||
|
|
7772e33ace | ||
|
|
a7faaa1b14 | ||
|
|
fb18a8e760 | ||
|
|
fd8f758ecd | ||
|
|
ed11386c3d | ||
|
|
b019cd99c6 | ||
|
|
8854c3d51a | ||
|
|
66d9c24ccc | ||
|
|
133d6bf2ca | ||
|
|
5a1767e0d5 | ||
|
|
60941b02dc | ||
|
|
6546914e68 | ||
|
|
bed14f8ab7 | ||
|
|
3ffc1c8f4a | ||
|
|
91dc80ba9a | ||
|
|
5ead613386 | ||
|
|
dba3fe385d | ||
|
|
6aec52bde7 | ||
|
|
1783b0e481 | ||
|
|
f807343197 | ||
|
|
ffa7e957c5 | ||
|
|
41b55d9b78 | ||
|
|
0abe62e027 | ||
|
|
a0e2ccf490 | ||
|
|
d040ec9b8e | ||
|
|
bbb923c7a8 | ||
|
|
87ffae250c | ||
|
|
7d2142a56e | ||
|
|
ea491dba64 | ||
|
|
698ea5f48e | ||
|
|
0d7af28a40 | ||
|
|
c348c293c8 | ||
|
|
ea013f92e9 | ||
|
|
40f6288fa3 | ||
|
|
a9d0abf82c | ||
|
|
0f2eed24bb | ||
|
|
53b088e60c | ||
|
|
1e19ee8785 | ||
|
|
6a8a2e8b0e | ||
|
|
2beee146b4 | ||
|
|
1ef3ca7bf7 | ||
|
|
949a0934c8 | ||
|
|
16ea2ee640 | ||
|
|
078fda3d6e | ||
|
|
2c3db736c4 | ||
|
|
4307af8cdf | ||
|
|
c34d863d3e | ||
|
|
5d8183f0b2 | ||
|
|
d6db0ccc12 | ||
|
|
0ecaeb89d3 | ||
|
|
c43fc2afc8 | ||
|
|
39a7719f85 | ||
|
|
7e77d79b3c | ||
|
|
b12e3e1475 | ||
|
|
868ac7d3a3 | ||
|
|
03312cc0d9 | ||
|
|
8a3a61bcd0 | ||
|
|
d257696604 | ||
|
|
b9531d5b07 | ||
|
|
090e14dfda | ||
|
|
a938d8e386 | ||
|
|
a726dcaa99 | ||
|
|
6e0b78cd4c | ||
|
|
908b1e562d | ||
|
|
9219d7aa57 | ||
|
|
1763dc162d | ||
|
|
5fc3e649b6 | ||
|
|
5e8eecb362 | ||
|
|
9ef3575c25 | ||
|
|
cfbd58c987 | ||
|
|
7d7248390c | ||
|
|
5bf3df531f | ||
|
|
e8bc39d95d | ||
|
|
24cc05dc09 | ||
|
|
93a606a192 | ||
|
|
b75d079c89 | ||
|
|
5e36d7fcfe | ||
|
|
bf9e3e769c | ||
|
|
195b102126 | ||
|
|
0ee7c30453 | ||
|
|
8f5310afad | ||
|
|
eb8bab9f46 | ||
|
|
563221783a | ||
|
|
a055e93a27 | ||
|
|
1c4806c515 | ||
|
|
db87e11e6b | ||
|
|
18edb61440 | ||
|
|
cbaaf1bc07 | ||
|
|
e034b4a8b0 | ||
|
|
beeb5ddec4 | ||
|
|
fd23b700fb | ||
|
|
2f5229c9fc | ||
|
|
dc64595467 | ||
|
|
24b312f8d5 | ||
|
|
53f89fad03 | ||
|
|
fc0e395678 | ||
|
|
f5543e8279 | ||
|
|
f4e63cbece | ||
|
|
14b7a1bdd1 | ||
|
|
0028eccadd | ||
|
|
a74c36a335 | ||
|
|
2f291233e6 | ||
|
|
5218d956f0 | ||
|
|
19e4dc5058 | ||
|
|
7e1973d9fc | ||
|
|
d3aa695263 | ||
|
|
ab765ca497 | ||
|
|
03785ddb5f | ||
|
|
f5b6604376 | ||
|
|
66525a739e | ||
|
|
e64cb1ae4d | ||
|
|
6ccde868be | ||
|
|
7ddd4ed1d7 | ||
|
|
7faf8325e7 | ||
|
|
0d444306c9 | ||
|
|
9e533e39b6 | ||
|
|
99c041ade3 | ||
|
|
42e1c9a1e0 | ||
|
|
d9f03aac34 | ||
|
|
b8590f954d | ||
|
|
0236a7eaf4 | ||
|
|
3d5fec9cb5 | ||
|
|
94e3f478d7 | ||
|
|
847741cb08 | ||
|
|
e41f103431 | ||
|
|
c2c9908f88 | ||
|
|
d94453a4e5 | ||
|
|
352e69d3f0 | ||
|
|
7df81307c1 | ||
|
|
f71a310543 | ||
|
|
f8d4de338b | ||
|
|
b7b0f4d988 | ||
|
|
4991dba418 | ||
|
|
db7dad0ba0 | ||
|
|
cdf5db41a7 | ||
|
|
b32bf96363 | ||
|
|
108a2fc64c | ||
|
|
1edf208421 | ||
|
|
dd9b5a08f0 | ||
|
|
802e12674e | ||
|
|
feba2edba2 | ||
|
|
6b8526efce | ||
|
|
72ea6912f7 | ||
|
|
0110fca856 | ||
|
|
60f3797200 | ||
|
|
da53237f41 | ||
|
|
cf4c83dd2b | ||
|
|
b4d0d872e7 | ||
|
|
8c8bf92311 | ||
|
|
4d44a5b71d | ||
|
|
a813e112d4 | ||
|
|
62cd5a9bae | ||
|
|
9ce985bbae | ||
|
|
7fd9e4fce9 | ||
|
|
5dca5450f2 | ||
|
|
68890ce196 | ||
|
|
5e7eed6a9a | ||
|
|
e5ad7bf299 | ||
|
|
9a1abfbb7d | ||
|
|
a41e70782b | ||
|
|
e071d48604 | ||
|
|
865f4d75be | ||
|
|
7389f59f4d | ||
|
|
8f5786b6e8 | ||
|
|
53a1403b53 | ||
|
|
ae1d0de24b | ||
|
|
33f9ada038 | ||
|
|
145e7e470a | ||
|
|
bff08d46f1 | ||
|
|
5f2562e905 | ||
|
|
6b651f8e60 | ||
|
|
57a912e828 | ||
|
|
ebef6661df | ||
|
|
44a3cad930 | ||
|
|
8e907392b3 | ||
|
|
459564e2d2 | ||
|
|
f7bc516502 | ||
|
|
bcf457d828 | ||
|
|
35f78f221b | ||
|
|
dad67b1f65 | ||
|
|
7fb3715d43 | ||
|
|
44045f8cb1 | ||
|
|
fc21d423fd | ||
|
|
4356aad0ae | ||
|
|
e7c2bd6e40 | ||
|
|
44baca5aed | ||
|
|
b6bdd44962 | ||
|
|
9666f1deae | ||
|
|
7999c9d251 | ||
|
|
b71ac5063e | ||
|
|
361c8b4fb4 | ||
|
|
e1a63af85b | ||
|
|
065be7056d | ||
|
|
f61b9635ba | ||
|
|
0df2a37d1b | ||
|
|
916673a345 | ||
|
|
66eb5b1dde | ||
|
|
a6b3682dba | ||
|
|
f3e577375e | ||
|
|
abc5bb5f61 | ||
|
|
e70d7cfc90 | ||
|
|
b3004fb883 | ||
|
|
e65bdffab5 | ||
|
|
8e0cf44164 | ||
|
|
0742edb396 | ||
|
|
de9574e872 | ||
|
|
e8e9810dd9 | ||
|
|
5ea32dc1e4 | ||
|
|
5f3e233ea7 | ||
|
|
c42d25dc33 | ||
|
|
b7dc2a51ad | ||
|
|
ac9927728a | ||
|
|
ca89b6dedd | ||
|
|
c69555b948 | ||
|
|
930ac9a5d0 | ||
|
|
891bd7888f | ||
|
|
20b92bf4cc | ||
|
|
57130c653a | ||
|
|
52bd6de7f4 | ||
|
|
466d9ba00a | ||
|
|
4cc29fef5c | ||
|
|
ac7e6f5fec | ||
|
|
bfa4af46e1 | ||
|
|
60bb494607 | ||
|
|
d5d1801df7 | ||
|
|
ecd417c6ce | ||
|
|
0966666256 | ||
|
|
aaf120127e | ||
|
|
d55eb93c94 | ||
|
|
bb30875db6 | ||
|
|
2d4b8e19e2 | ||
|
|
2c6a5df4ac | ||
|
|
5a6c11d9f4 | ||
|
|
a70264892b | ||
|
|
34b55f2012 | ||
|
|
9503b966ec | ||
|
|
a3c2958f22 | ||
|
|
4e0446b6c9 | ||
|
|
e6a3431315 | ||
|
|
f06eb4bf8b | ||
|
|
845c07f560 | ||
|
|
22ff526e99 | ||
|
|
93fc85b2af | ||
|
|
e8384cbcca | ||
|
|
d64b17543c | ||
|
|
050e32ed65 | ||
|
|
158ad3ee2f | ||
|
|
7f235792b3 | ||
|
|
724f500c92 | ||
|
|
ffb9e15465 | ||
|
|
090215cc7f | ||
|
|
94a810755f | ||
|
|
7172a53c3a | ||
|
|
ba8ba5a909 | ||
|
|
af16066603 | ||
|
|
c663787ab4 | ||
|
|
79c3defac0 | ||
|
|
6a8f267db6 | ||
|
|
e8180067b9 | ||
|
|
efa9b7e20b | ||
|
|
a7ce772222 | ||
|
|
a09ef37d30 | ||
|
|
df1a1c8441 | ||
|
|
090a83b974 | ||
|
|
26ed531c64 | ||
|
|
e412981f7b | ||
|
|
57eb7c0bad | ||
|
|
1c6ee3030e | ||
|
|
eb666b725f | ||
|
|
2f9a9c4248 | ||
|
|
c220da74ef | ||
|
|
d4dc662621 | ||
|
|
164929d557 | ||
|
|
fd8378d7d6 | ||
|
|
2ff721a93f | ||
|
|
39ad6abbf8 | ||
|
|
296e2a3775 | ||
|
|
bd519ae0d9 | ||
|
|
714abb7ea1 | ||
|
|
0d338f463c | ||
|
|
c06f9e1efe | ||
|
|
cb4b75f155 | ||
|
|
c7d84b7451 | ||
|
|
133bdb42e3 | ||
|
|
cf04587553 | ||
|
|
36d66521c9 | ||
|
|
cf64728899 | ||
|
|
426dce9ce3 | ||
|
|
c412409164 | ||
|
|
d1acb8d4eb | ||
|
|
eca1911b72 | ||
|
|
2eb308ff75 | ||
|
|
892c00bb9f | ||
|
|
82fb3e00b8 | ||
|
|
3f92ab719f | ||
|
|
9d6f7755b8 | ||
|
|
84ff4aaf1a | ||
|
|
1d61562efe | ||
|
|
842b1b5a47 | ||
|
|
8619bf8332 | ||
|
|
70288ef71e | ||
|
|
567aed8316 | ||
|
|
0916ac47c9 | ||
|
|
60188ad863 | ||
|
|
849a7857ac | ||
|
|
fca0e24410 | ||
|
|
6640a1c861 | ||
|
|
963b1db67f | ||
|
|
a3453eb8d4 | ||
|
|
77986844c8 | ||
|
|
de50222d1c | ||
|
|
c1ba4fc989 | ||
|
|
9b5a57f548 | ||
|
|
df56d24304 | ||
|
|
5caf547a9f | ||
|
|
89e93a02f3 | ||
|
|
af74c7c9d2 | ||
|
|
b28cbe8b6f | ||
|
|
923b785fd1 | ||
|
|
017f3ae479 | ||
|
|
34db368fe4 | ||
|
|
c301119fdf | ||
|
|
5d92b4281f | ||
|
|
941c036297 | ||
|
|
682bbf19ef | ||
|
|
69e0c84522 | ||
|
|
a2a20556d8 | ||
|
|
60a2df7db2 | ||
|
|
79e4f5fd22 | ||
|
|
b5b8fa4f6b | ||
|
|
f00ee72c35 | ||
|
|
a27d73b13d | ||
|
|
6e9c7c4aa9 | ||
|
|
c32ed59e4e | ||
|
|
3bf35bbc15 | ||
|
|
d4a64fba74 | ||
|
|
1182b325c2 | ||
|
|
e0d385a328 | ||
|
|
d3bda9a516 | ||
|
|
7b81e554ae | ||
|
|
7d75155e01 | ||
|
|
c0b0d0a81a | ||
|
|
232bb79bed | ||
|
|
b3de830b61 | ||
|
|
8cb18e8d64 | ||
|
|
94404da606 | ||
|
|
88e827f3f1 | ||
|
|
7563d4f573 | ||
|
|
d98a8aa589 | ||
|
|
ec46e5e510 | ||
|
|
fe8e53f7a7 | ||
|
|
3011278aab | ||
|
|
16e6b2cf52 | ||
|
|
c06626d8c6 | ||
|
|
4106eee7c7 | ||
|
|
31bfc6e55b | ||
|
|
ce958eded5 | ||
|
|
40d3abba41 | ||
|
|
daed379550 | ||
|
|
f22ae56bc9 | ||
|
|
f05ed6390c | ||
|
|
140edac7f9 | ||
|
|
a4a77d3f91 | ||
|
|
011e0cde62 | ||
|
|
532b02cd19 | ||
|
|
41c81f20e1 | ||
|
|
a5f951f27c | ||
|
|
ab5268fc84 | ||
|
|
f1b6587ebb | ||
|
|
fedc06d290 | ||
|
|
bcfc501ca6 | ||
|
|
a930751112 | ||
|
|
9fd2b6deb4 | ||
|
|
126be8ec7c | ||
|
|
f06762b361 | ||
|
|
ddae41877f | ||
|
|
b3006ed2a5 | ||
|
|
fb06fa19e3 | ||
|
|
98dd25e04c | ||
|
|
d6802e1022 | ||
|
|
371400ae15 | ||
|
|
4989f0d899 | ||
|
|
87b412dc3a | ||
|
|
25f01e8ec3 | ||
|
|
e5f9b479af | ||
|
|
1f061b3154 | ||
|
|
cc895444b1 | ||
|
|
41ae8de136 | ||
|
|
a84a2eae6a | ||
|
|
84b9dcb73f | ||
|
|
d6b3b73490 | ||
|
|
6e30ea1e3f | ||
|
|
cb96148912 | ||
|
|
887b3484f7 | ||
|
|
c65a1f10cb | ||
|
|
69dbaaacac | ||
|
|
cdf8494879 | ||
|
|
07cdfefdee | ||
|
|
4cb16d8328 | ||
|
|
5cc7f616c9 | ||
|
|
7b8f30adcb | ||
|
|
c263929002 | ||
|
|
c32408e694 | ||
|
|
82f89748a4 | ||
|
|
95fbb9514e | ||
|
|
cea64d52fa | ||
|
|
86a6812dbb | ||
|
|
00f0e92dee | ||
|
|
5784602544 | ||
|
|
79946dc8a0 | ||
|
|
c8778c73c3 | ||
|
|
15592390c5 | ||
|
|
9df320c423 | ||
|
|
4e257c03a1 | ||
|
|
29242cfab9 | ||
|
|
7b15d02b99 | ||
|
|
d05ef39c74 | ||
|
|
59841dd25c | ||
|
|
541f9940ac | ||
|
|
b867123e30 | ||
|
|
6f0a9d6f76 | ||
|
|
6516d8e1d6 | ||
|
|
4f3889d5bf | ||
|
|
f7948f7fef | ||
|
|
17b675132b | ||
|
|
da8b00a5e4 | ||
|
|
978dd0fdd9 | ||
|
|
2820e9cf1e | ||
|
|
76ba475d76 | ||
|
|
76b73a6ff2 | ||
|
|
49c109693a | ||
|
|
8ad0c6d543 | ||
|
|
c002606a88 | ||
|
|
b11b08e987 | ||
|
|
4deb09e72e | ||
|
|
5006fb2ceb | ||
|
|
91c604d584 | ||
|
|
0c7e63a07e | ||
|
|
ace3f94d20 | ||
|
|
050f94f746 | ||
|
|
11c47dc510 | ||
|
|
07a16d19e0 | ||
|
|
4f4e724b1b | ||
|
|
bece30aee5 | ||
|
|
9445a302ae | ||
|
|
7ce23de84c | ||
|
|
683f81f195 | ||
|
|
6123f11021 | ||
|
|
bd2ab7bc15 | ||
|
|
3f71251ffa | ||
|
|
57f295d3a6 | ||
|
|
7b48ca584c | ||
|
|
501025306c | ||
|
|
96d597b6a4 | ||
|
|
3a533934c7 | ||
|
|
bc32d6b5cd | ||
|
|
8045c6bff8 | ||
|
|
d584c0a6f4 | ||
|
|
b48fa87e8b | ||
|
|
13342afe94 | ||
|
|
228bb9e7ff | ||
|
|
7ff822ee49 | ||
|
|
94b24ef2dd | ||
|
|
3cfbbc0635 | ||
|
|
841bac014a | ||
|
|
a2f8b5f2ee | ||
|
|
2d64114764 | ||
|
|
1d0ebcd2cf | ||
|
|
5bb0ac0d2a | ||
|
|
a9cb3dd17f | ||
|
|
a7c925d6e1 | ||
|
|
b5aa4dffbe | ||
|
|
faac1bbe15 | ||
|
|
57e2fc546e | ||
|
|
4629cc0bf6 | ||
|
|
fc22c9dd50 | ||
|
|
5af7f12eb8 | ||
|
|
f8e4467725 | ||
|
|
2ca717905e | ||
|
|
3b1e299264 | ||
|
|
3042386549 | ||
|
|
f85d9885d3 | ||
|
|
0cf7b1012f | ||
|
|
770b29803c | ||
|
|
76f23d4dcf | ||
|
|
c79ba67673 | ||
|
|
2193a77eed | ||
|
|
6841110122 | ||
|
|
dcf249004c | ||
|
|
b99ba323d5 | ||
|
|
91a1333c21 | ||
|
|
16877a5ad8 | ||
|
|
1fa009d1ca | ||
|
|
c5d68cd1df | ||
|
|
0ebfbfe791 | ||
|
|
2245901f6f | ||
|
|
31acd1c26e | ||
|
|
bf95b64376 | ||
|
|
268984b478 | ||
|
|
b3a914aca8 | ||
|
|
8104df0547 | ||
|
|
3bd0f950da | ||
|
|
942b11a581 | ||
|
|
e4bdd6fcba | ||
|
|
bc59416ff2 | ||
|
|
8bd16e2b58 | ||
|
|
33879eceb3 | ||
|
|
d087c87ffe | ||
|
|
e6fd66facb | ||
|
|
8b8eb2cf88 | ||
|
|
24b2efa342 | ||
|
|
3efc863435 | ||
|
|
adf31588d2 | ||
|
|
d8fc0ccfe1 | ||
|
|
3d3395df3a | ||
|
|
630024d895 | ||
|
|
aeec5b4b68 | ||
|
|
e20650616e | ||
|
|
9809628544 | ||
|
|
0a3b663a1b | ||
|
|
14b168fcab | ||
|
|
a39201675f | ||
|
|
9b7ba01618 | ||
|
|
1cc0339d40 | ||
|
|
2f467baf94 | ||
|
|
a81eae5d01 | ||
|
|
9f5de3bb5c | ||
|
|
88f9dc9639 | ||
|
|
20949c497b | ||
|
|
3028f7465d | ||
|
|
897b9ffca5 | ||
|
|
391ed04adb | ||
|
|
ea2d32381d | ||
|
|
03641dcea4 | ||
|
|
7b58554f82 | ||
|
|
5866ef42e6 | ||
|
|
cb90d3ce76 | ||
|
|
11235cff7b | ||
|
|
df5c300303 | ||
|
|
b4974d5e68 | ||
|
|
3890ca3fcb | ||
|
|
7b77d536c3 | ||
|
|
527c5a6126 | ||
|
|
e94670d4d6 | ||
|
|
20fc2d4274 | ||
|
|
7b2a5bf0c6 | ||
|
|
3a48a290a0 | ||
|
|
fa8f1151aa | ||
|
|
f850285c40 | ||
|
|
895aa7d7f7 | ||
|
|
98b16064b4 | ||
|
|
12f7021e12 | ||
|
|
34ed116e90 | ||
|
|
e43519e914 | ||
|
|
b43e18a70e | ||
|
|
fab29dcbcf | ||
|
|
7f75be9fb9 | ||
|
|
b1d8f7e09d | ||
|
|
f815a4ef10 | ||
|
|
3a4603b4b0 | ||
|
|
d917bf084c | ||
|
|
eed736d010 | ||
|
|
24195cf941 | ||
|
|
58b858287b | ||
|
|
2f738dd440 | ||
|
|
480e788d95 | ||
|
|
f74b1ec9b0 | ||
|
|
fd9b7f672b | ||
|
|
67fac322af | ||
|
|
b37dd23c35 | ||
|
|
e2999137a7 | ||
|
|
9ebb3f127e | ||
|
|
e779c3aa36 | ||
|
|
93909bb30e | ||
|
|
a5d86612e3 | ||
|
|
864f182def | ||
|
|
58eeb00bb3 | ||
|
|
e09a5c2972 | ||
|
|
a290cef01c | ||
|
|
ff3dfa94dd | ||
|
|
cb1f58e39d | ||
|
|
0d9f9b67b7 | ||
|
|
40765184be | ||
|
|
e8c70bfa99 | ||
|
|
9230cf3da6 | ||
|
|
dc22b7d4a5 | ||
|
|
5cdb9128ae | ||
|
|
bb5986b8a3 | ||
|
|
8d2406f448 | ||
|
|
38772455a4 | ||
|
|
bbf89ba3a8 | ||
|
|
7a2a383a9f | ||
|
|
201d790899 | ||
|
|
7883814424 | ||
|
|
f0bb2a0c9b | ||
|
|
d8648eae57 | ||
|
|
f72c1a1224 | ||
|
|
c67068b52b | ||
|
|
557838efa4 | ||
|
|
8e1c9371bb | ||
|
|
8581c7328f | ||
|
|
59fabbb464 | ||
|
|
f876d0bf2a | ||
|
|
9bff1e24b5 | ||
|
|
a7ccaa5ec7 | ||
|
|
c1ad451c3e | ||
|
|
7c78500d96 | ||
|
|
9875fe44e2 | ||
|
|
6212757595 | ||
|
|
9dcdfd993f | ||
|
|
99356595df | ||
|
|
e7b80e8368 | ||
|
|
80cecdb41f | ||
|
|
588c45ea8d | ||
|
|
b8fc77bd13 | ||
|
|
5c96544b7d | ||
|
|
007c6ff8d9 | ||
|
|
c36d94aac2 | ||
|
|
9c1b3c6d88 | ||
|
|
cb312d43bf | ||
|
|
9d0f642689 | ||
|
|
8acdfd223f | ||
|
|
c356ad3b65 | ||
|
|
2b1b2db8ec | ||
|
|
b806546e95 | ||
|
|
2e56aa6dfd | ||
|
|
39219cf7fe | ||
|
|
3611a3de4a | ||
|
|
6a4dca06e6 | ||
|
|
154f70acf1 | ||
|
|
bd088df90c | ||
|
|
4fd88b23cc | ||
|
|
3ae8d67002 | ||
|
|
01898e0f33 | ||
|
|
281536e866 | ||
|
|
30b18b7bb7 | ||
|
|
7df7d2b4df | ||
|
|
abfc08dc82 | ||
|
|
67d2992fdc | ||
|
|
5e34f6cf9e | ||
|
|
66bdeaddb4 | ||
|
|
d6eb64344d | ||
|
|
478d42a3ac | ||
|
|
c504e6794f | ||
|
|
8c09e1ca40 | ||
|
|
26cff956c4 | ||
|
|
adcb3615f0 | ||
|
|
e3f68a64e7 | ||
|
|
69b7480147 | ||
|
|
9e62f8b687 | ||
|
|
e919a873cd | ||
|
|
c0326fb1ce | ||
|
|
30a015a92f | ||
|
|
40924a6f6c | ||
|
|
a327a6f737 | ||
|
|
c119d63a9f | ||
|
|
f537599199 | ||
|
|
2a452afb6d | ||
|
|
4705155d13 | ||
|
|
d9ae9d7cc8 | ||
|
|
cee0a7df24 | ||
|
|
646cfe11e1 | ||
|
|
dbae50bf13 | ||
|
|
9c4e7a0743 | ||
|
|
ecd52167d7 | ||
|
|
5860f47122 | ||
|
|
47600225e1 | ||
|
|
bc0bdadfdb | ||
|
|
b23dfcc3ad | ||
|
|
a13937e5a2 | ||
|
|
b805c9e089 | ||
|
|
4b286026c3 | ||
|
|
c3272ab020 | ||
|
|
a04b6ed6bc | ||
|
|
cc0d254e4f | ||
|
|
ccc25cc3eb | ||
|
|
f36b3ca9ad | ||
|
|
07b62da9f4 | ||
|
|
cd7f3a786d | ||
|
|
fa6c04c746 | ||
|
|
85985ad895 | ||
|
|
e55036a346 | ||
|
|
b4ca4a0fab | ||
|
|
bc81c718c8 | ||
|
|
39856ab9cb | ||
|
|
46fda147a5 | ||
|
|
be18d5f345 | ||
|
|
f7f180f930 | ||
|
|
305423c34c | ||
|
|
0d233db56a | ||
|
|
10f7a23b6f | ||
|
|
f5d7dac35d | ||
|
|
811634bd8a | ||
|
|
91c1a54d70 | ||
|
|
af993553fb | ||
|
|
cd6537ed6d | ||
|
|
7d14dad02e | ||
|
|
2332e4f9fc | ||
|
|
db5dc9d5d8 | ||
|
|
1e8fc23095 | ||
|
|
bc60e07d57 | ||
|
|
e1ff6fe881 | ||
|
|
0fe381cd70 | ||
|
|
dba1f1d42f | ||
|
|
fe6effeeb4 | ||
|
|
3bd1c646b7 | ||
|
|
de771e8cbd | ||
|
|
6affa7d3e9 | ||
|
|
c8a5e8fa7a | ||
|
|
8982cc0472 | ||
|
|
1efae6a785 | ||
|
|
a16cb0b4d5 | ||
|
|
5aa6dcc6c8 | ||
|
|
442112503a | ||
|
|
d43c9c11f4 | ||
|
|
9f217cd983 | ||
|
|
92c3cfd81f | ||
|
|
557b583434 | ||
|
|
c7101ba6d2 | ||
|
|
4c65e0e1cd | ||
|
|
bfc9cd7174 | ||
|
|
868b219a28 | ||
|
|
211690374b | ||
|
|
1819e947f9 | ||
|
|
e197ecd16e | ||
|
|
2cc1f53f3b | ||
|
|
e299095ca1 | ||
|
|
c40975eda5 | ||
|
|
fcf4f87919 | ||
|
|
fe9d3b16c5 | ||
|
|
0974e2af60 | ||
|
|
0094b08c56 | ||
|
|
96b9fb0787 | ||
|
|
5111cd3af9 | ||
|
|
a0aabccac6 | ||
|
|
04da058284 | ||
|
|
4b257a1c0e | ||
|
|
55d900ef8e | ||
|
|
99b133d7a7 | ||
|
|
ed26032176 | ||
|
|
7bf39e9212 | ||
|
|
b5446194ec | ||
|
|
6e2add04ea | ||
|
|
4a162b71a2 | ||
|
|
7a5306598a | ||
|
|
436d75c376 | ||
|
|
6fea033c6e | ||
|
|
806bc4e164 | ||
|
|
2604f21fa6 | ||
|
|
3fcfdf573d | ||
|
|
27c327b97e | ||
|
|
38540337a9 | ||
|
|
dd48748f5a | ||
|
|
286a9db9df | ||
|
|
01ea35a078 | ||
|
|
54032dee04 | ||
|
|
0680cc4360 | ||
|
|
3b2fa0ce82 | ||
|
|
da09526eac | ||
|
|
e5ab519397 | ||
|
|
6e0915b631 | ||
|
|
d1202b7986 | ||
|
|
03c7bbd33b | ||
|
|
ebbfc21a15 | ||
|
|
f0fd70fadb | ||
|
|
bb2d53e768 | ||
|
|
7800711d34 | ||
|
|
7e17f8591a | ||
|
|
1a6cd5162e | ||
|
|
7b588b5bcd | ||
|
|
bb9a9f2b98 | ||
|
|
6415ef51e9 | ||
|
|
4bb51d165a | ||
|
|
93c8a45083 | ||
|
|
6a1b4c99c7 | ||
|
|
f4a75d91d2 | ||
|
|
f3ae2fea43 | ||
|
|
d6ee9d4810 | ||
|
|
0a1f5d12a1 | ||
|
|
5a9f40a46a | ||
|
|
65c046b200 | ||
|
|
6d040bf67a | ||
|
|
567a4785b3 | ||
|
|
f739a43906 | ||
|
|
7e3c017e5a | ||
|
|
334c36ac7c | ||
|
|
4dd2a598f3 | ||
|
|
0ce31d14f5 | ||
|
|
b6a5941b97 | ||
|
|
73161f33d4 | ||
|
|
bc8377a81c | ||
|
|
9fa594c2dd | ||
|
|
618e62325e | ||
|
|
299af46146 | ||
|
|
42d4e3533e | ||
|
|
935b0c88e9 | ||
|
|
0222d506c2 | ||
|
|
7c5119c5a9 | ||
|
|
413de3f4a5 | ||
|
|
ef4ff6fe9e | ||
|
|
3879a66876 | ||
|
|
6dbe4adbc6 | ||
|
|
194230c3a6 | ||
|
|
6c18da0d2a | ||
|
|
0c8042dc49 | ||
|
|
d577b8058c | ||
|
|
51fbffba2f | ||
|
|
5c6f438319 | ||
|
|
267b0e9b03 | ||
|
|
b860e9a3c2 | ||
|
|
b0c4150967 | ||
|
|
7e563e9215 | ||
|
|
01ee23d980 | ||
|
|
7f2cf9b373 | ||
|
|
88b59df262 | ||
|
|
36505f802c | ||
|
|
f11c99638e | ||
|
|
cb5ad145ab | ||
|
|
3f0f73beba | ||
|
|
8e86a189ec | ||
|
|
e85a378770 | ||
|
|
c55eda9f3b | ||
|
|
b772a83282 | ||
|
|
eee95ef3f0 | ||
|
|
ad58ad265b | ||
|
|
37635d93e6 | ||
|
|
7d7f84562c | ||
|
|
47713b1eb7 | ||
|
|
b9351ab4b1 | ||
|
|
76d748f372 | ||
|
|
0c3c55edac | ||
|
|
5d6f6783ae | ||
|
|
afb8af1f5f | ||
|
|
bd5e8f77bd | ||
|
|
229137cad4 | ||
|
|
aa6593f984 | ||
|
|
dc8895ed82 | ||
|
|
c57bfd9a66 | ||
|
|
52d0f82dc3 | ||
|
|
dadc6b8a3b | ||
|
|
4cff5db8f4 | ||
|
|
3ec9141f91 | ||
|
|
aebc2fff07 | ||
|
|
ef058cdd9a | ||
|
|
8c53ff1e80 | ||
|
|
c622ded866 | ||
|
|
731b68fbc5 | ||
|
|
ae77214f7f | ||
|
|
fc60217820 | ||
|
|
87eaaf494b | ||
|
|
8166284cfd | ||
|
|
75876d57be | ||
|
|
a5107c1803 | ||
|
|
4427552b60 | ||
|
|
73c5259362 | ||
|
|
532f577fe9 | ||
|
|
2203492799 | ||
|
|
688efae2d0 | ||
|
|
eca5331a81 | ||
|
|
eb958c080e | ||
|
|
948d84fd67 | ||
|
|
5737b1e925 | ||
|
|
0f6f089698 | ||
|
|
c8b2f761f6 | ||
|
|
8251f8b8d0 | ||
|
|
dc2bb45440 | ||
|
|
73eba86360 | ||
|
|
98d26b6b18 | ||
|
|
d63e411e9a | ||
|
|
23919d9115 | ||
|
|
78c0279bb6 | ||
|
|
2259578afa | ||
|
|
5d81cd24c9 | ||
|
|
5c7e3ba791 | ||
|
|
72820abd7b | ||
|
|
75b8cd741b | ||
|
|
50e9994b2c | ||
|
|
5bc435c4e8 | ||
|
|
94b3210c38 | ||
|
|
c2a38c607b | ||
|
|
0c482b5c64 | ||
|
|
de23f39d18 | ||
|
|
821674720a | ||
|
|
fb21b5d059 | ||
|
|
f9d9c4a6aa | ||
|
|
54123daa8d | ||
|
|
c4e9ee2586 | ||
|
|
f74fbc1a06 | ||
|
|
de3d3ced29 | ||
|
|
434d5e9be4 | ||
|
|
235e3939d5 | ||
|
|
1dd6ee3f6d | ||
|
|
1f138e7e01 | ||
|
|
26db0920d3 | ||
|
|
45debc52ef | ||
|
|
307b3bcbb4 | ||
|
|
f231b76ba6 | ||
|
|
644a796525 | ||
|
|
b6ced95187 | ||
|
|
a8a3701ba6 | ||
|
|
f8fd45a735 | ||
|
|
86bf55a3d8 | ||
|
|
d6ec9d21ec | ||
|
|
8388180466 | ||
|
|
1b9e18d471 | ||
|
|
5ea3080546 | ||
|
|
7c618c40bc | ||
|
|
ffc3d4a076 | ||
|
|
664a7c75d4 | ||
|
|
c6b9662372 | ||
|
|
914d362176 | ||
|
|
7384c12b11 | ||
|
|
ecfa880820 | ||
|
|
613237188a | ||
|
|
4e971e8874 | ||
|
|
191d68618a | ||
|
|
f7ba7232d8 | ||
|
|
615f2d7295 | ||
|
|
2d3056e94f | ||
|
|
78d7b0bf0e | ||
|
|
a180abdbfd | ||
|
|
46ce362ff3 | ||
|
|
100742f7a2 | ||
|
|
8e54de1d77 | ||
|
|
21ac19eb94 | ||
|
|
99211d0444 | ||
|
|
74685a184f | ||
|
|
3ea2152839 | ||
|
|
560208b1c6 | ||
|
|
5c8533aa76 | ||
|
|
a5bb290f28 | ||
|
|
d8870f562f | ||
|
|
d221f46ab6 | ||
|
|
f6bbb02da6 | ||
|
|
567cf55085 | ||
|
|
f1b1c65413 | ||
|
|
fd9c8d85a6 | ||
|
|
806d9fe71b | ||
|
|
0584dc011c | ||
|
|
c42b3bf689 | ||
|
|
92f1b46fbb | ||
|
|
fdd1370d99 | ||
|
|
75e9e12093 | ||
|
|
b7f2d8f17e | ||
|
|
27d3021704 | ||
|
|
aecbddef42 | ||
|
|
6a70b05660 | ||
|
|
de3393e63f | ||
|
|
41bd5790cf | ||
|
|
a3b62c8eed | ||
|
|
d5c9b41db1 | ||
|
|
d4ff427c55 | ||
|
|
05a1ac2a35 | ||
|
|
f7e99a2162 | ||
|
|
08a9ab02ba | ||
|
|
7dfbf5b2e4 | ||
|
|
4180155a47 | ||
|
|
3fd1e9c3db | ||
|
|
36dffb8e3b | ||
|
|
8d770ee2ef | ||
|
|
70e59e2999 | ||
|
|
672da2daeb | ||
|
|
2a41a50216 | ||
|
|
8405e1741f | ||
|
|
efbb2a4838 | ||
|
|
a33913d960 | ||
|
|
92963d12a6 | ||
|
|
1f3b6ebc89 | ||
|
|
d7209229a3 | ||
|
|
c7d83d7ba3 | ||
|
|
3a211712eb | ||
|
|
3d87be2674 | ||
|
|
7ded15aadd | ||
|
|
adf10989b0 | ||
|
|
be316018fd | ||
|
|
8dc61360c6 | ||
|
|
118a6a94e1 | ||
|
|
f3c1722b0c | ||
|
|
126b6ecd85 | ||
|
|
08d398aa48 | ||
|
|
3a0f857173 | ||
|
|
88e752c007 | ||
|
|
8c170d480a | ||
|
|
4ad05e0e0f | ||
|
|
c3209b53d2 | ||
|
|
f5ea2dfac4 | ||
|
|
9a79a2f37c | ||
|
|
2dbce548a8 | ||
|
|
a3d3be5201 | ||
|
|
d677ad6789 | ||
|
|
ddb4d1fdcc | ||
|
|
8657927354 | ||
|
|
8eaa9eae52 | ||
|
|
b4da7e6672 | ||
|
|
41696eb95e | ||
|
|
e8f30d4502 | ||
|
|
0091c7e1b3 | ||
|
|
4b7358e4e5 | ||
|
|
f42e9f5e15 | ||
|
|
615a15d5fa | ||
|
|
c62d5fd115 | ||
|
|
a0c941aad1 | ||
|
|
3048cd7558 | ||
|
|
2f01ddff7f | ||
|
|
cb9686b0e5 | ||
|
|
284ce40c4a | ||
|
|
8d07735332 | ||
|
|
0587fb32ba | ||
|
|
a5b359096c | ||
|
|
32f20cc217 | ||
|
|
baff4e0ab5 | ||
|
|
7d0b17fc67 | ||
|
|
9d26a88c3d | ||
|
|
a16935fd42 | ||
|
|
d1ad062be8 | ||
|
|
2eef59dc59 | ||
|
|
c45c9748dc | ||
|
|
5b4ecd6028 | ||
|
|
a6088ffc5a | ||
|
|
7dfae526c7 | ||
|
|
657329b981 | ||
|
|
2ce982b433 | ||
|
|
a4d2f04307 | ||
|
|
e5fe441cbd | ||
|
|
1ec10ac8c7 | ||
|
|
ae61bb7bb8 | ||
|
|
e43dc5c95b | ||
|
|
830ab81bfa | ||
|
|
c9c05bece9 | ||
|
|
43fca8a3f8 | ||
|
|
946594bb6b | ||
|
|
e3cfc40cac | ||
|
|
4c5691bd02 | ||
|
|
98d58a80c9 | ||
|
|
d58b3869a7 | ||
|
|
cf3b6416c4 | ||
|
|
0617904d0a | ||
|
|
03ee807824 | ||
|
|
6dbb90af21 | ||
|
|
6277ba98d9 | ||
|
|
1f69ad5aa1 | ||
|
|
1a4b715ef2 | ||
|
|
9596bda7fc | ||
|
|
5794832a72 | ||
|
|
b8617a6183 | ||
|
|
05206b42d8 | ||
|
|
efc6ff0c39 | ||
|
|
c1c2a0d294 | ||
|
|
886d302575 | ||
|
|
f6b6f0a2f9 | ||
|
|
8a3002d933 | ||
|
|
194b309d2d | ||
|
|
23a7a275ed | ||
|
|
f5543a428d | ||
|
|
ee82fb781a | ||
|
|
65ae8773b5 | ||
|
|
4b77e7f2f7 | ||
|
|
fdf1ee39e4 | ||
|
|
e038500be3 | ||
|
|
6c75d82997 | ||
|
|
b9b1984646 | ||
|
|
1a58ec5156 | ||
|
|
42982ac3a1 | ||
|
|
07b5c8fe2a | ||
|
|
861c55b417 | ||
|
|
444f1f2da3 | ||
|
|
218aa04f79 | ||
|
|
a1a42253d9 | ||
|
|
3eea546142 | ||
|
|
305f597696 | ||
|
|
8e4334159c | ||
|
|
b20b73cdb1 | ||
|
|
d17c2ec46d | ||
|
|
afcbbe2b86 | ||
|
|
00bc797b68 | ||
|
|
2e55464f80 | ||
|
|
60ea962aa3 | ||
|
|
499ca00476 | ||
|
|
5cff1c6e7e | ||
|
|
58c2278284 | ||
|
|
c946b4d1b2 | ||
|
|
bc8f1bc4f0 | ||
|
|
c173c26b64 | ||
|
|
29e1530cd7 | ||
|
|
6112a1266a | ||
|
|
5f6145b0fd | ||
|
|
4eecfca79c | ||
|
|
e79e9fade6 | ||
|
|
e5635a81af | ||
|
|
0c4ef446e2 | ||
|
|
e17320651c | ||
|
|
a5ddba6f80 | ||
|
|
efa04c8a22 | ||
|
|
7f52671781 | ||
|
|
68613beb3e | ||
|
|
2b5a53d6b6 | ||
|
|
5f7750c6e6 | ||
|
|
ad3ad9bb79 | ||
|
|
1bf915ca2d | ||
|
|
d14b107e5b | ||
|
|
bf41e955ed | ||
|
|
52e6ede06e | ||
|
|
c6ace95236 | ||
|
|
624e5f83c8 | ||
|
|
1354aa9ef4 | ||
|
|
53025ca377 | ||
|
|
88dfe8cfd9 | ||
|
|
197396c14e | ||
|
|
e53c538151 | ||
|
|
f5b5d34a27 | ||
|
|
610b633096 | ||
|
|
6394756dae | ||
|
|
3786f956e6 | ||
|
|
aa1ced04cb | ||
|
|
fb1c592640 | ||
|
|
769174c2dc | ||
|
|
5def392ce1 | ||
|
|
71df07ac9a | ||
|
|
d056376bba | ||
|
|
168f53b72b | ||
|
|
0ba0abbd40 | ||
|
|
509761f96d | ||
|
|
3d7a1c3972 | ||
|
|
3a75600dbb | ||
|
|
3fe91ed83f | ||
|
|
9d3233651d | ||
|
|
47db124cda | ||
|
|
9de24788d6 | ||
|
|
06bd78d720 | ||
|
|
46b3f37810 | ||
|
|
603846c985 | ||
|
|
5317b7050b | ||
|
|
ab5c3f184b | ||
|
|
3ca96c8043 | ||
|
|
0de5728c82 | ||
|
|
726dee9ee3 | ||
|
|
3a78dce032 | ||
|
|
a76b852989 | ||
|
|
29a7498965 | ||
|
|
a28a95c11a | ||
|
|
4c2d752fb1 | ||
|
|
cfda15ffc1 | ||
|
|
7ba86d078f | ||
|
|
96324fb67f | ||
|
|
bcc8854eaa | ||
|
|
dcb4b314bf | ||
|
|
e5a1182304 | ||
|
|
af48ecfc87 | ||
|
|
92f4cc359f | ||
|
|
a98e5c674f | ||
|
|
7625313f9c | ||
|
|
ee97ffd887 | ||
|
|
ddb577b9b8 | ||
|
|
97ef557b97 | ||
|
|
bbf2ab4d45 | ||
|
|
f58da213ff | ||
|
|
60562a6312 | ||
|
|
0e7e000d56 | ||
|
|
0bf6b23cb8 | ||
|
|
b0ea656129 | ||
|
|
67a82e5106 | ||
|
|
a7768dd36f | ||
|
|
e321c90522 | ||
|
|
7b409b2276 | ||
|
|
30f4d3f959 | ||
|
|
e1dfc4259f | ||
|
|
d8cd2d24d5 | ||
|
|
4038877d85 | ||
|
|
5e0f6ea7db | ||
|
|
9db0e7cc3a | ||
|
|
bc11170217 | ||
|
|
e447baafa1 | ||
|
|
40c059b8fc | ||
|
|
a0371df33f | ||
|
|
206ec1a06b | ||
|
|
3688c103b5 | ||
|
|
65626296da | ||
|
|
7987bba743 | ||
|
|
d5ec319367 | ||
|
|
9cd119859d | ||
|
|
799ec9975b | ||
|
|
e11e2a137c | ||
|
|
356facf4af | ||
|
|
0a95528fc0 | ||
|
|
ddf19dc81c | ||
|
|
a5aae5c45b | ||
|
|
bd581ab476 | ||
|
|
e5f71c36af | ||
|
|
d6337819ba | ||
|
|
c1da9dbc8b | ||
|
|
cff6e2b446 | ||
|
|
c1ddf2c2ed | ||
|
|
c3e5ee1840 | ||
|
|
195417eb4d | ||
|
|
5da6415bfe | ||
|
|
4da92e63af | ||
|
|
7fdcd281c6 |
No files matched your search
+5
-2
@@ -29,7 +29,7 @@ php_lcov.info: lcov-test
|
||||
@rm -rf lcov_data/
|
||||
@$(mkinstalldirs) lcov_data/
|
||||
@echo
|
||||
-@find . -name \*.gcda -o -name \*.gcno -o -name \*.da | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | uniq | while read x; do \
|
||||
-@find . -name \*.gcda -o -name \*.gcno -o -name \*.da -o -name \*.h | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | uniq | while read x; do \
|
||||
echo -n . ;\
|
||||
y=`echo $$x | sed -e 's!\.libs/!!'`; \
|
||||
dir=lcov_data/`dirname $$x`; \
|
||||
@@ -49,6 +49,9 @@ php_lcov.info: lcov-test
|
||||
if test -f "$(top_srcdir)/$$y.l"; then \
|
||||
ln -f -s $(top_srcdir)/$$y.l lcov_data/$$y.l; \
|
||||
fi; \
|
||||
if test -f "$(top_srcdir)/$$y"; then \
|
||||
ln -f -s $(top_srcdir)/$$y lcov_data/$$y; \
|
||||
fi; \
|
||||
if test -f "$(top_builddir)/$$y.c"; then \
|
||||
ln -f -s $(top_builddir)/$$y.c lcov_data/$$y.c; \
|
||||
fi; \
|
||||
@@ -64,7 +67,7 @@ php_lcov.info: lcov-test
|
||||
|
||||
lcov-html: php_lcov.info
|
||||
@echo "Generating lcov HTML"
|
||||
@$(LTP_GENHTML) --legend --output-directory lcov_html/ --title "PHP Code Coverage" --show-details php_lcov.info
|
||||
@$(LTP_GENHTML) --legend --output-directory lcov_html/ --title "PHP Code Coverage" php_lcov.info
|
||||
|
||||
lcov-clean:
|
||||
rm -f php_lcov.info
|
||||
|
||||
@@ -1,46 +1,496 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
24 Jul 2006, PHP 5.2.0RC1
|
||||
- Updated bundled MySQL client library to version 5.0.22 in the Windows
|
||||
08 Feb 2007, PHP 5.2.1
|
||||
- Added read-timeout context option "timeout" for HTTP streams. (Hannes, Ilia).
|
||||
- Added CURLOPT_TCP_NODELAY constant to Curl extension. (Sara)
|
||||
- Added support for hex numbers of any size. (Matt)
|
||||
- Added function stream_socket_shutdown(). It is a wrapper for system
|
||||
shutdown() function, that shut downs part of a full-duplex connection.
|
||||
(Dmitry)
|
||||
- Added internal heap protection (Dmitry)
|
||||
. memory-limit is always enabled (--enable-memory-limit removed)
|
||||
. default value if memory-limit is set to 128M
|
||||
. safe unlinking
|
||||
. cookies
|
||||
. canary protection (debug build only)
|
||||
. random generation of cookies and canaries
|
||||
- Added forward support for 'b' prefix in front of string literals. (Andrei)
|
||||
- Added three new functions to ext/xmlwriter (Rob, Ilia)
|
||||
. xmlwriter_start_dtd_entity()
|
||||
. xmlwriter_end_dtd_entity()
|
||||
. xmlwriter_write_dtd_entity()
|
||||
- Added a meta tag to phpinfo() output to prevent search engines from indexing
|
||||
the page. (Ilia)
|
||||
- Added new function, sys_get_temp_dir(). (Hartmut)
|
||||
- Added missing object support to file_put_contents(). (Ilia)
|
||||
- Added support for md2, ripemd256 and ripemd320 algos to hash(). (Sara)
|
||||
- Added forward support for (binary) cast. (Derick)
|
||||
- Added optimization for imageline with horizontal and vertical lines (Pierre)
|
||||
|
||||
- Removed dependency from SHELL32.DLL. (Dmitry)
|
||||
- Removed double "wrong parameter count" warnings in various functions.
|
||||
(Hannes)
|
||||
- Moved extensions to PECL:
|
||||
. ext/informix (Derick, Tony)
|
||||
|
||||
- Changed double-to-string utilities to use BSD implementation. (Dmitry, Tony)
|
||||
- Updated bundled libcURL to version 7.16.0 in the Windows distro. (Edin)
|
||||
- Updated timezone database to version 2006.16. (Derick)
|
||||
- cgi.* and fastcgi.* directives are moved to INI subsystem. The new directive
|
||||
cgi.check_shebang_line can be used to omitting check for "#! /usr/bin/php"
|
||||
line. (Dmitry).
|
||||
- Improved proc_open(). Now on Windows it can run external commands not
|
||||
through CMD.EXE. (Dmitry)
|
||||
- VCWD_REALPATH() is improved to use realpath cache without VIRTUAL_DIR.
|
||||
(Dmitry)
|
||||
- ext/bcmath initialization code is moved from request startup to module
|
||||
startup. (Dmitry)
|
||||
- Zend Memory Manager Improvements (Dmitry)
|
||||
. use HeapAlloc() instead of VirtualAlloc()
|
||||
. use "win32" storage manager (instead of "malloc") on Windows by default
|
||||
- Zip Extension Improvements (Pierre)
|
||||
. Fixed leak in statName and stateIndex
|
||||
. Fixed return setComment (Hannes)
|
||||
. Added addEmptyDir method
|
||||
- Filter Extension Improvements (Ilia, Pierre)
|
||||
. Fixed a bug when callback function returns a non-modified value.
|
||||
. Added filter support for $_SERVER in cgi/apache2 sapis.
|
||||
. Make sure PHP_SELF is filtered in Apache 1 sapi.
|
||||
. Fixed bug #39358 (INSTALL_HEADERS contains incorrect reference to
|
||||
php_filter.h).
|
||||
. Added "default" option that allows a default value to be set for an
|
||||
invalid or missing value.
|
||||
. Invalid filters fails instead of returning unsafe value
|
||||
. Fixed possible double encoding problem with sanitizing filters
|
||||
. Make use of space-strict strip_tags() function
|
||||
. Fixed whitespace trimming
|
||||
. Added support for FastCGI environment variables. (Dmitry)
|
||||
- PDO_MySQL Extension Improvements (Ilia)
|
||||
. Enabled buffered queries by default.
|
||||
. Enabled prepared statement emulation by default.
|
||||
|
||||
- Small optimization of the date() function. (Matt,Ilia)
|
||||
- Optimized the internal is_numeric_string() function. (Matt,Ilia)
|
||||
- Optimized array functions utilizing php_splice(). (Ilia)
|
||||
- Windows related optimizations (Dmitry, Stas)
|
||||
. COM initialization/deinitialization are done only if necessary
|
||||
. removed unnecessary checks for ISREG file and corresponding stat() calls
|
||||
. opendir() is reimplementation using GetFistFile/GetNextFile those are
|
||||
faster then _findfirst/_findnext
|
||||
. implemented registry cache that prevent registry lookup on each request.
|
||||
In case of modification of corresponding registry-tree PHP will reload it
|
||||
automatic
|
||||
. start timeout thread only if necessary
|
||||
. stat() is reimplementation using GetFileAttributesEx(). The new
|
||||
implementation is faster then implementation in MS VC CRT, but it doesn't
|
||||
support Windows 95.
|
||||
- Streams optimization (Dmitry)
|
||||
. removed unnecessary ftell() calls (one call for each included PHP file)
|
||||
. disabled calls to read() after EOF
|
||||
|
||||
- Fixed incorrect function names on FreeBSD where inet_pton() was named
|
||||
__inet_pton() and inet_ntop() was named __inet_ntop(). (Hannes)
|
||||
- Fixed FastCGI impersonation for persistent connections on Windows. (Dmitry)
|
||||
- Fixed wrong signature initialization in imagepng (Takeshi Abe)
|
||||
- Fixed ftruncate() with negative size on FreeBSD. (Hannes)
|
||||
- Fixed segfault in RegexIterator when given invalid regex. (Hannes)
|
||||
- Fixed segfault in SplFileObject->openFile()->getPathname(). (Hannes)
|
||||
- Fixed segfault in ZTS mode when OCI8 statements containing sub-statements
|
||||
are destroyed in wrong order. (Tony)
|
||||
- Fixed the validate email filter so that the letter "v" can also be used in
|
||||
the user part of the email address. (Derick)
|
||||
- Fixed bug #40297 (compile failure in ZTS mode when collections support is
|
||||
missing). (Tony)
|
||||
- Fixed bug #40285 (The PDO prepare parser goes into an infinite loop in
|
||||
some instances). (Ilia)
|
||||
- Fixed Bug #40274 (Sessions fail with numeric root keys). (Ilia)
|
||||
- Fixed bug #40259 (ob_start call many times - memory error). (Dmitry)
|
||||
- Fixed bug #40231 (file_exists incorrectly reports false). (Dmitry)
|
||||
- Fixed bug #40228 (ZipArchive::extractTo does create empty directories
|
||||
recursively). (Pierre)
|
||||
- Fixed bug #40200 (The FastCgi version has different realpath results than
|
||||
thread safe version). (Dmitry)
|
||||
- Fixed bug #40191 (use of array_unique() with objects triggers segfault).
|
||||
(Tony)
|
||||
- Fixed bug #40189 (possible endless loop in zlib.inflate stream filter).
|
||||
(Greg, Tony)
|
||||
- Fixed bug #40169 (CURLOPT_TCP_NODELAY only available in curl >= 7.11.2).
|
||||
(Tony)
|
||||
- Fixed bug #40129 (iconv extension doesn't compile with CodeWarrior on
|
||||
Netware). (gk at gknw dot de, Tony)
|
||||
- Fixed bug #40127 (apache2handler doesn't compile on Netware).
|
||||
(gk at gknw dot de)
|
||||
- Fixed bug #40121 (PDO_DBLIB driver wont free statements). (Ilia)
|
||||
- Fixed bug #40098 (php_fopen_primary_script() not thread safe). (Ilia)
|
||||
- Fixed bug #40092 (chroot() doesn't clear realpath cache). (Dmitry)
|
||||
- Fixed bug #40091 (spl_autoload_register with 2 instances of the same class).
|
||||
(Ilia)
|
||||
- Fixed bug #40083 (milter SAPI functions always return false/null). (Tony)
|
||||
- Fixed bug #40079 (php_get_current_user() not thread safe).
|
||||
(Ilia, wharmby at uk dot ibm dot com)
|
||||
- Fixed bug #40078 (ORA-01405 when fetching NULL values using
|
||||
oci_bind_array_by_name()). (Tony)
|
||||
- Fixed bug #40076 (zend_alloc.c: Value of enumeration constant must be in
|
||||
range of signed integer). (Dmitry)
|
||||
- Fixed bug #40073 (exif_read_data dies on certain images). (Tony, Marcus)
|
||||
- Fixed bug #40036 (empty() does not work correctly with ArrayObject when
|
||||
using ARRAY_AS_PROPS). (Ilia)
|
||||
- Fixed bug #40012 (php_date.c doesn't compile on Netware).
|
||||
(gk at gknw dot de, Derick)
|
||||
- Fixed bug #40009 (http_build_query(array()) returns NULL). (Ilia)
|
||||
- Fixed bug #40002 (Try/Catch performs poorly). (Dmitry)
|
||||
- Fixed bug #39993 (tr_TR.UTF-8 locale has problems with PHP). (Ilia)
|
||||
- Fixed bug #39990 (Cannot "foreach" over overloaded properties). (Dmitry)
|
||||
- Fixed bug #39988 (type argument of oci_define_by_name() is ignored).
|
||||
(Chris Jones, Tony)
|
||||
- Fixed bug #39984 (redirect response code in header() could be ignored
|
||||
in CGI sapi). (Ilia)
|
||||
- Fixed bug #39979 (PGSQL_CONNECT_FORCE_NEW will causes next connect to
|
||||
establish a new connection). (Ilia)
|
||||
- Fixed bug #39971 (pg_insert/pg_update do not allow now() to be used
|
||||
for timestamp fields). (Ilia)
|
||||
- Fixed bug #39969 (ini setting short_open_tag has no effect when using
|
||||
--enable-maintainer-zts). (Dmitry)
|
||||
- Fixed bug #39952 (zip ignoring --with-libdir on zlib checks)
|
||||
(judas dot iscariote at gmail dot com)
|
||||
- Fixed bug #39944 (References broken). (Dmitry)
|
||||
- Fixed bug #39935 (Extensions tidy,mcrypt,mhash,pdo_sqlite ignores
|
||||
--with-libdir). (judas dot iscariote at gmail dot com, Derick)
|
||||
- Fixed bug #39903 (Notice message when executing __halt_compiler() more than
|
||||
once). (Tony)
|
||||
- Fixed bug #39898 (FILTER_VALIDATE_URL validates \r\n\t etc). (Ilia)
|
||||
- Fixed bug #39890 (using autoconf 2.6x and --with-layout=GNU breaks PEAR
|
||||
install path). (Tony)
|
||||
- Fixed bug #39884 (ReflectionParameter::getClass() throws exception for
|
||||
type hint self). (thekid at php dot net)
|
||||
- Fixed bug #39878 (CURL doesn't compile on Sun Studio Pro). (Ilia)
|
||||
- Fixed bug #39873 (number_format() breaks with locale & decimal points).
|
||||
(Ilia)
|
||||
- Fixed bug #39869 (safe_read does not initialize errno).
|
||||
(michiel at boland dot org, Dmitry)
|
||||
- Fixed bug #39850 (SplFileObject throws contradictory/wrong error messages
|
||||
when trying to open "php://wrong"). (Tony)
|
||||
- Fixed bug #39846 (Invalid IPv4 treated as valid). (Ilia)
|
||||
- Fixed bug #39845 (Persistent connections generate a warning in pdo_pgsql).
|
||||
(Ilia)
|
||||
- Fixed bug #39832 (SOAP Server: parameter not matching the WSDL specified
|
||||
type are set to 0). (Dmitry)
|
||||
- Fixed bug #39825 (foreach produces memory error). (Dmitry)
|
||||
- Fixed bug #39816 (apxs2filter ignores httpd.conf & .htaccess php config
|
||||
settings). (Ilia)
|
||||
- Fixed bug #39815 (SOAP double encoding is not locale-independent). (Dmitry)
|
||||
- Fixed bug #39797 (virtual() does not reset changed INI settings). (Ilia)
|
||||
- Fixed bug #39795 (build fails on AIX because crypt_r() uses different
|
||||
data struct). (Tony)
|
||||
- Fixed bug #39791 (Crash in strtotime() on overly long relative date
|
||||
multipliers). (Ilia)
|
||||
- Fixed bug #39787 (PHP doesn't work with Apache 2.3).
|
||||
(mv at binarysec dot com).
|
||||
- Fixed bug #39782 (setTime() on a DateTime constructed with a Weekday
|
||||
yields incorrect results). (Ilia)
|
||||
- Fixed bug #39780 (PNG image with CRC/data error raises fatal error) (Pierre)
|
||||
- Fixed bug #39779 (Enable AUTH PLAIN mechanism in underlying libc-client).
|
||||
(michael dot heimpold at s2000 dot tu-chemnitz dot de, Ilia)
|
||||
- Fixed bug #39775 ("Indirect modification ..." message is not shown).
|
||||
(Dmitry)
|
||||
- Fixed bug #39763 (magic quotes are applied twice by ext/filter in
|
||||
parse_str()). (Ilia)
|
||||
- Fixed bug #39760 (cloning fails on nested SimpleXML-Object). (Rob)
|
||||
- Fixed bug #39759 (Can't use stored procedures fetching multiple result
|
||||
sets in pdo_mysql). (Ilia)
|
||||
- Fixed bug #39754 (Some POSIX extension functions not thread safe).
|
||||
(Ilia, wharmby at uk dot ibm dot com)
|
||||
- Fixed bug #39751 (putenv crash on Windows). (KevinJohnHoffman at gmail.com)
|
||||
- Fixed bug #39732 (oci_bind_array_by_name doesn't work on Solaris 64bit).
|
||||
(Tony)
|
||||
- Fixed bug #39724 (Broken build due to spl/filter usage of pcre extension).
|
||||
(Tony, Ilia)
|
||||
- Fixed bug #39718 (possible crash if assert.callback is set in ini). (Ilia)
|
||||
- Fixed bug #39702 (php crashes in the allocator on linux-m68k). (Dmitry)
|
||||
- Fixed bug #39685 (iconv() - undefined function). (Hannes)
|
||||
- Fixed bug #39673 (file_get_contents causes bus error on certain offsets).
|
||||
(Tony)
|
||||
- Fixed bug #39663 (Memory leak in pg_get_notify() and a possible memory
|
||||
corruption on Windows in pgsql and pdo_pgsql extensions).
|
||||
(Ilia, matteo at beccati dot com)
|
||||
- Fixed bug #39662 (Segfault when calling asXML() of a cloned
|
||||
SimpleXMLElement). (Rob, Tony)
|
||||
- Fixed bug #39656 (crash when calling fetch() on a PDO statment object after
|
||||
closeCursor()). (Ilia, Tony)
|
||||
- Fixed bug #39653 (ext/dba doesn't check for db-4.5 and db-4.4 when db4
|
||||
support is enabled). (Tony)
|
||||
- Fixed bug #39652 (Wrong negative results from memory_get_usage()). (Dmitry)
|
||||
- Fixed bug #39648 (Implementation of PHP functions chown() and chgrp() are
|
||||
not thread safe). (Ilia, wharmby at uk dot ibm dot com)
|
||||
- Fixed bug #39640 (Segfault with "Allowed memory size exhausted"). (Dmitry)
|
||||
- Fixed bug #39625 (Apache crashes on importStylesheet call). (Rob)
|
||||
- Fixed bug #39623 (thread safety fixes on *nix for putenv() & mime_magic).
|
||||
(Ilia, wharmby at uk dot ibm dot com)
|
||||
- Fixed bug #39621 (str_replace() is not binary safe on strings with equal
|
||||
length). (Tony)
|
||||
- Fixed bug #39613 (Possible segfault in imap initialization due to missing
|
||||
module dependency). (wharmby at uk dot ibm dot com, Tony)
|
||||
- Fixed bug #39606 (Use of com.typelib_file in PHP.ini STILL causes A/V). (Rob)
|
||||
- Fixed bug #39602 (Invalid session.save_handler crashes PHP). (Dmitry)
|
||||
- Fixed bug #39596 (Creating Variant of type VT_ARRAY). (Rob)
|
||||
- Fixed bug #39583 (ftp_put() does not change transfer mode to ASCII). (Tony)
|
||||
- Fixed bug #39576 (array_walk() doesn't separate user data zval). (Tony)
|
||||
- Fixed bug #39575 (move_uploaded_file() no longer working (safe mode
|
||||
related)). (Tony)
|
||||
- Fixed bug #39571 (timeout ssl:// connections). (Ilia)
|
||||
- Fixed bug #39564 (PDO::errorInfo() returns inconsistent information when
|
||||
sqlite3_step() fails). (Tony)
|
||||
- Fixed bug #39548 (ZMSG_LOG_SCRIPT_NAME not routed to OutputDebugString()
|
||||
on Windows). (Dmitry)
|
||||
- Fixed bug #39538 (fgetcsv can't handle starting newlines and trailing odd
|
||||
number of backslashes). (David Soria Parra, Pierre)
|
||||
- Fixed bug #39534 (Error in maths to calculate of
|
||||
ZEND_MM_ALIGNED_MIN_HEADER_SIZE). (wharmby at uk dot ibm dot com, Dmitry)
|
||||
- Fixed bug #39527 (Failure to retrieve results when multiple unbuffered,
|
||||
prepared statements are used in pdo_mysql). (Ilia)
|
||||
- Fixed bug #39508 (imagefill crashes with small images 3 pixels or less).
|
||||
(Pierre)
|
||||
- Fixed bug #39506 (Archive corrupt with ZipArchive::addFile method). (Pierre)
|
||||
- Fixed bug #39504 (xmlwriter_write_dtd_entity() creates Attlist tag, not
|
||||
entity). (Hannes)
|
||||
- Fixed bug #39483 (Problem with handling of \ char in prepared statements).
|
||||
(Ilia, suhachov at gmail dot com)
|
||||
- Fixed bug #39458 (ftp_nlist() returns false on empty dirs). (Nuno)
|
||||
- Fixed bug #39454 (Returning a SOAP array segfaults PHP). (Dmitry)
|
||||
- Fixed bug #39450 (getenv() fills other super-globals). (Ilia, Tony)
|
||||
- Fixed bug #39449 (Overloaded array properties do not work correctly).
|
||||
(Dmitry)
|
||||
- Fixed bug #39445 (Calling debug_backtrace() in the __toString()
|
||||
function produces a crash). (Dmitry)
|
||||
- Fixed bug #39438 (Fatal error: Out of memory). (Dmitry)
|
||||
- Fixed bug #39435 ('foo' instanceof bar gives invalid opcode error). (Sara)
|
||||
- Fixed bug #39414 (Syntax error while compiling with Sun Workshop Complier).
|
||||
(Johannes)
|
||||
- Fixed bug #39398 (Booleans are not automatically translated to integers).
|
||||
(Ilia)
|
||||
- Fixed bug #39394 (Missing check for older variants of openssl). (Ilia)
|
||||
- Fixed bug #39367 (clearstatcache() doesn't clear realpath cache).
|
||||
(j at pureftpd dot org, Dmitry)
|
||||
- Fixed bug #39366 (imagerotate does not use alpha with angle > 45 degrees)
|
||||
(Pierre)
|
||||
- Fixed bug #39364 (Removed warning on empty haystack inside mb_strstr()).
|
||||
(Ilia)
|
||||
- Fixed bug #39362 (Added an option to imap_open/imap_reopen to control the
|
||||
number of connection retries). (Ilia)
|
||||
- Fixed bugs #39361 & #39400 (mbstring function overloading problem). (Seiji)
|
||||
- Fixed bug #39354 (Allow building of curl extension against libcurl
|
||||
7.16.0). (Ilia)
|
||||
- Fixed bug #39350 (crash with implode("\n", array(false))). (Ilia)
|
||||
- Fixed bug #39344 (Unnecessary calls to OnModify callback routine for
|
||||
an extension INI directive). (wharmby at uk dot ibm dot com, Dmitry)
|
||||
- Fixed bug #39320 (ZEND_HASH_APPLY_STOP causes deletion). (Marcus)
|
||||
- Fixed bug #39313 (spl_autoload triggers Fatal error). (Marcus)
|
||||
- Fixed bug #39300 (make install fails if wget is not available). (Tony)
|
||||
- Fixed bug #39297 (Memory corruption because of indirect modification of
|
||||
overloaded array). (Dmitry)
|
||||
- Fixed bug #39286 (misleading error message when invalid dimensions are
|
||||
given) (Pierre)
|
||||
- Fixed bug #39273 (imagecopyresized may ignore alpha channel) (Pierre)
|
||||
- Fixed bug #39265 (Fixed path handling inside mod_files.sh).
|
||||
(michal dot taborsky at gmail dot com, Ilia)
|
||||
- Fixed bug #39217 (serialNumber might be -1 when the value is too large).
|
||||
(Pierre, Tony)
|
||||
- Fixed bug #39215 (Inappropriate close of stdin/stdout/stderr). (Wez, Ilia)
|
||||
- Fixed bug #39201 (Possible crash in Apache 2 with 413 ErrorHandler). (Ilia)
|
||||
- Fixed bug #39151 (Parse error in recursiveiteratoriterator.php). (Marcus)
|
||||
- Fixed bug #39121 (Incorrect return array handling in non-wsdl soap client).
|
||||
(Dmitry)
|
||||
- Fixed bug #39090 (DirectoryFilterDots doxygen docs and example is wrong).
|
||||
(Marcus)
|
||||
- Fixed bug #38852 (XML-RPC Breaks iconv). (Hannes)
|
||||
- Fixed bug #38770 (unpack() broken with longs on 64 bit machines).
|
||||
(Ilia, David Soria Parra).
|
||||
- Fixed bug #38698 (for some keys cdbmake creates corrupted db and cdb can't
|
||||
read valid db). (Marcus)
|
||||
- Fixed bug #38680 (Added missing handling of basic types in json_decode).
|
||||
(Ilia)
|
||||
- Fixed bug #38604 (Fixed request time leak inside foreach() when iterating
|
||||
through virtual properties). (Dmitry)
|
||||
- Fixed bug #38602 (header( "HTTP/1.0 ..." ) does not change proto version).
|
||||
(Ilia)
|
||||
- Fixed bug #38542 (proc_get_status() returns wrong PID on windows). (Nuno)
|
||||
- Fixed bug #38536 (SOAP returns an array of values instead of an object).
|
||||
(Dmitry)
|
||||
- Fixed bug #38456 (Apache2 segfaults when virtual() is called in .php
|
||||
ErrorDocument). (Ilia)
|
||||
- Fixed bug #38325 (spl_autoload_register() gives wrong line for "class not
|
||||
found"). (Ilia)
|
||||
- Fixed bug #38319 (Remove bogus warnings from persistent PDO connections).
|
||||
(Ilia)
|
||||
- Fixed bug #38274 (Memlimit fatal error sent to "wrong" stderr when using
|
||||
fastcgi). (Dmitry)
|
||||
- Fixed bug #38252 (Incorrect PDO error message on invalid default fetch
|
||||
mode). (Ilia)
|
||||
- Fixed bug #37927 (Prevent trap when COM extension processes argument of
|
||||
type VT_DISPATCH|VT_REF) (Andy)
|
||||
- Fixed bug #37773 (iconv_substr() gives "Unknown error" when string
|
||||
length = 1"). (Ilia)
|
||||
- Fixed bug #37627 (session save_path check checks the parent directory).
|
||||
(Ilia)
|
||||
- Fixed bug #37619 (proc_open() closes stdin on fork() failure).
|
||||
(jdolecek at NetBSD dot org, Nuno)
|
||||
- Fixed bug #37588 (COM Property propputref converts to PHP function
|
||||
and can't be accesed). (Rob)
|
||||
- Fixed bug #36975 (natcasesort() causes array_pop() to misbehave).
|
||||
(Hannes)
|
||||
- Fixed bug #36812 (pg_execute() modifies input array). (Ilia)
|
||||
- Fixed bug #36798 (Error parsing named parameters with queries containing
|
||||
high-ascii chars). (Ilia)
|
||||
- Fixed bug #36644 (possible crash in variant_date_from_timestamp()). (Ilia)
|
||||
- Fixed bug #36427 (proc_open() / proc_close() leak handles on windows).
|
||||
(jdolecek at NetBSD dot org, Nuno)
|
||||
- Fixed bug #36392 (wrong number of decimal digits with %e specifier in
|
||||
sprintf). (Matt,Ilia)
|
||||
- Fixed bug #36214 (__get method works properly only when conditional
|
||||
operator is used). (Dmitry)
|
||||
- Fixed bug #35634 (Erroneous "Class declarations may not be nested"
|
||||
error raised). (Carl P. Corliss, Dmitry)
|
||||
- Fixed bug #35106 (nested foreach fails when array variable has a
|
||||
reference). (Dmitry)
|
||||
- Fixed bug #34564 (COM extension not returning modified "out" argument) (Andy)
|
||||
- Fixed bug #33734 (Something strange with COM Object). (Rob)
|
||||
- Fixed bug #33386 (ScriptControl only sees last function of class). (Rob)
|
||||
- Fixed bug #33282 (Re-assignment by reference does not clear the is_ref
|
||||
flag) (Ilia, Dmitry, Matt Wilmas)
|
||||
- Fixed bug #30074 (apparent symbol table error with
|
||||
extract($blah, EXTR_REFS)) (Brian)
|
||||
- Fixed bug #29840 (is_executable() does not honor safe_mode_exec_dir
|
||||
setting). (Ilia)
|
||||
- Fixed PECL bug #7295 (ORA-01405: fetched column value is NULL on LOB
|
||||
fields). (Tony)
|
||||
|
||||
02 Nov 2006, PHP 5.2.0
|
||||
- Updated bundled OpenSSL to version 0.9.8d in the Windows distro. (Edin)
|
||||
- Updated Postgresql client libraries to 8.1.4 in the Windows distro. (Edin)
|
||||
- Updated PCRE to version 6.7. (Ilia)
|
||||
- Updated libsqlite in ext/pdo_sqlite to 3.3.7. (Ilia)
|
||||
- Updated bundled MySQL client library to version 5.0.22 in the Windows
|
||||
distribution. (Edin)
|
||||
- Updated timezonedb to version 2006.7. (Derick)
|
||||
|
||||
- Changed priority of PHPRC environment variable on win32 to be higher then
|
||||
- Added ability to make SOAP call userspace PHP<->XML converters. (Dmitry)
|
||||
- Added support for character sets in pg_escape_string() for PostgreSQL 8.1.4
|
||||
and higher. (Ilia)
|
||||
- Added support for character sets in PDO quote() method for PostgreSQL 8.1.4
|
||||
and higher. (Ilia)
|
||||
- Added DSA key generation support to openssl_pkey_new(), FR #38731 (marci
|
||||
at balabit dot hu, Tony)
|
||||
- Added SoapServer::setObject() method (it is a simplified version of
|
||||
SoapServer::setClass() method). (Dmitry)
|
||||
- Added support for hexadecimal entity in imagettftext() for the bundled GD.
|
||||
(Pierre)
|
||||
- Added support for httpOnly flag for session extension and cookie setting
|
||||
functions. (Scott MacVicar, Ilia)
|
||||
- Added version specific registry keys to allow different configurations for
|
||||
different php version. (Richard, Dmitry)
|
||||
- Added "PHPINIDir" Apache directive to apache and apache_hooks SAPIs.
|
||||
(Dmitry)
|
||||
- Added an optional boolean parameter to memory_get_usage() and
|
||||
memory_get_peak_usage() to get memory size allocated by emalloc() or real
|
||||
size of memory allocated from system. (Dmitry)
|
||||
- Added Zip Archive extension. (Pierre)
|
||||
- Added RFC1867 fileupload processing hook. (Stefan E.)
|
||||
- Added JSON and Filter extensions. (Derick, Rasmus)
|
||||
- Added error messages to disk_free_space() and disk_total_space() functions.
|
||||
FR #37971 (Tony)
|
||||
- Added PATHINFO_FILENAME option to pathinfo() to get the filename.
|
||||
(Toby S. and Christian S.)
|
||||
- Added array_fill_keys() function. (Marcus, Matt Wilmas)
|
||||
- Added posix_initgroups() function. (Ilia)
|
||||
- Added an optional parameter to parse_url() to allow retrieval of distinct
|
||||
URL components. (Ilia)
|
||||
- Added optional parameter to http_build_query() to allow specification of
|
||||
string separator. (Ilia)
|
||||
- Added image_type_to_extension() function. (Hannes, Ilia)
|
||||
- Added allow_url_include ini directive to complement allow_url_fopen. (Rasmus)
|
||||
- Added automatic module globals management. (Dmitry)
|
||||
- Added RFC2397 (data: stream) support. (Marcus)
|
||||
- Added new error mode E_RECOVERABLE_ERROR. (Derick, Marcus, Tony)
|
||||
- Added support for getenv() input filtering. (Rasmus)
|
||||
- Added support for constructors in interfaces to force constructor signature
|
||||
checks in implementations. (Marcus)
|
||||
- Added memory_get_peak_usage() function for retrieving peak memory usage of
|
||||
a PHP script. (Ilia)
|
||||
- Added pg_field_table() function. (Edin)
|
||||
- Added SimpleXMLElement::saveXML() as an alias for SimpleXMLElement::asXML().
|
||||
(Hannes)
|
||||
- Added DOMNode::getNodePath() for getting an XPath for a node. (Christian)
|
||||
- Added gmp_nextprime() function. (ants dot aasma at gmail dot com, Tony)
|
||||
- Added error_get_last() function. (Mike)
|
||||
|
||||
- Removed current working directory from the php.ini search path for CLI and
|
||||
re-added it for other SAPIs (restore to pre 5.1.x behavior). (Edin)
|
||||
- Moved extensions to PECL:
|
||||
. ext/filepro (Derick, Tony)
|
||||
. ext/hwapi (Derick, Tony)
|
||||
- Disabled CURLOPT_FOLLOWLOCATION in curl when open_basedir or
|
||||
safe_mode are enabled. (Stefan E., Ilia)
|
||||
|
||||
- Increased default memory limit to 16 megabytes to accommodate for a more
|
||||
accurate memory utilization measurement.
|
||||
- In addition to path to php.ini, PHPRC now may specify full file name.
|
||||
(Dmitry)
|
||||
|
||||
- Optimized array/HashTable copying. (Matt Wilmas, Dmitry)
|
||||
- Optimized zend_try/zend_catch macros by eliminating memcpy(3). (Dmitry)
|
||||
- Optimized require_once() and include_once() by eliminating fopen(3) on
|
||||
second usage. (Dmitry)
|
||||
- Optimized request shutdown sequence. Restoring ini directives now iterates
|
||||
only over modified directives instead of all. (Dmitry)
|
||||
|
||||
- Changed priority of PHPRC environment variable on win32 to be higher then
|
||||
value from registry. (Dmitry)
|
||||
- Changed __toString() to be called wherever applicable. (Marcus)
|
||||
- Changed E_ALL error reporting mode to include E_RECOVERABLE_ERROR. (Marcus)
|
||||
- Changed realpath cache to be disabled when "open_basedir" or "safe_mode"
|
||||
- Changed realpath cache to be disabled when "open_basedir" or "safe_mode"
|
||||
are enabled on per-request basis. (Ilia)
|
||||
|
||||
- Improved SNMP extension: (Jani)
|
||||
. Renamed snmp_set_oid_numeric_print() to snmp_set_oid_output_format().
|
||||
. Added 2 new constants: SNMP_OID_OUTPUT_FULL and SNMP_OID_OUTPUT_NUMERIC
|
||||
. Fixed bug #37564 (AES privacy encryption not possible due to net-snmp 5.2
|
||||
compatibility issue). (Patch: scott dot moynes+php at gmail dot com)
|
||||
- Improved OpenSSL extension: (Pierre)
|
||||
. Added support for all supported algorithms in openssl_verify
|
||||
. Added openssl_pkey_get_details, returns the details of a key
|
||||
. Added x509 v3 extensions support
|
||||
. Added openssl_csr_get_subject() and openssl_csr_get_public_key()
|
||||
. Added 3 new constants OPENSSL_VERSION_TEXT and OPENSSL_VERSION_NUMBER and
|
||||
OPENSSL_KEYTYPE_EC
|
||||
- Improved the Zend memory manager: (Dmitry)
|
||||
. Removed unnecessary "--disable-zend-memory-manager" configure option.
|
||||
. Added "--enable-malloc-mm" configure option which is enabled by default
|
||||
in debug builds to allow using internal and external memory debuggers.
|
||||
. Allow tweaking the memory manager with ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE
|
||||
. Added "--enable-malloc-mm" configure option which is enabled by default in
|
||||
debug builds to allow using internal and external memory debuggers.
|
||||
. Allow tweaking the memory manager with ZEND_MM_MEM_TYPE and ZEND_MM_SEG_SIZE
|
||||
environment variables.
|
||||
. For more information: Zend/README.ZEND_MM
|
||||
- Improved safe_mode check for the error_log() function. (Ilia)
|
||||
- Improved the error reporting in SOAP extension on request failure. (Ilia)
|
||||
- Improved crypt() on win32 to be about 10 times faster and to have friendlier
|
||||
- Improved crypt() on win32 to be about 10 times faster and to have friendlier
|
||||
license. (Frank, Dmitry)
|
||||
- Improved performance of the implode() function on associated arrays. (Ilia)
|
||||
- Improved performance of str_replace() when doing 1 char to 1 char or 1 char
|
||||
- Improved performance of str_replace() when doing 1 char to 1 char or 1 char
|
||||
to many chars replacement. (Ilia)
|
||||
- Improved apache2filter SAPI:
|
||||
. Allowed PHP to be an arbitrary filter in the chain and read the script
|
||||
from the Apache stream. (John)
|
||||
. Added support for apache2filter in the Windows build including binary
|
||||
support for both Apache 2.0.x (php5apache2_filter.dll) and Apache 2.2.x
|
||||
. Allowed PHP to be an arbitrary filter in the chain and read the script from
|
||||
the Apache stream. (John)
|
||||
. Added support for apache2filter in the Windows build including binary
|
||||
support for both Apache 2.0.x (php5apache2_filter.dll) and Apache 2.2.x
|
||||
(php5apache2_2_filter.dll). (Edin)
|
||||
- Improved apache2handler SAPI:
|
||||
. Changed ap_set_content_type() to be called only once. (Mike)
|
||||
. Added support for Apache 2.2 handler in the Windows distribution. (Edin)
|
||||
- Improved FastCGI SAPI: (Dmitry)
|
||||
. Removed source compatibility with libfcgi.
|
||||
. Optimized access to FastCGI environment variables by using HashTable
|
||||
. Optimized access to FastCGI environment variables by using HashTable
|
||||
instead of linear search.
|
||||
. Allowed PHP_FCGI_MAX_REQUESTS=0 that assumes no limit.
|
||||
. Allowed PHP_FCGI_CHILDREN=0 that assumes no worker children. (FastCGI
|
||||
. Allowed PHP_FCGI_CHILDREN=0 that assumes no worker children. (FastCGI
|
||||
requests are handled by main process itself)
|
||||
- Improved CURL:
|
||||
. Added control character checks for "open_basedir" and "safe_mode" checks.
|
||||
@@ -65,74 +515,223 @@ PHP NEWS
|
||||
. Added readInnerXML(), readOuterXML(), readString(), setSchema(). (2.6.20+)
|
||||
. Changed to passing libxml options when loading reader.
|
||||
|
||||
- Added Zip Archive extension. (Pierre)
|
||||
- Added RFC1867 fileupload processing hook. (Stefan E.)
|
||||
- Added JSON and Filter extensions. (Derick, Rasmus)
|
||||
- Added error messages to disk_free_space() and disk_total_space()
|
||||
functions. FR #37971 (Tony)
|
||||
- Added PATHINFO_FILENAME option to pathinfo() to get the filename. (Toby S.
|
||||
and Christian S.)
|
||||
- Added array_fill_keys() function. (Marcus, Matthew Wilmas)
|
||||
- Added posix_initgroups() function. (Ilia)
|
||||
- Added an optional parameter to parse_url() to allow retrieval of distinct URL
|
||||
components. (Ilia)
|
||||
- Added optional parameter to http_build_query() to allow specification of
|
||||
string separator. (Ilia)
|
||||
- Added image_type_to_extension() function. (Hannes, Ilia)
|
||||
- Added allow_url_include ini directive to complement allow_url_fopen. (Rasmus)
|
||||
- Added automatic module globals management. (Dmitry)
|
||||
- Added RFC2397 (data: stream) support. (Marcus)
|
||||
- Added new error mode E_RECOVERABLE_ERROR. (Derick, Marcus, Tony)
|
||||
- Added support for getenv() input filtering. (Rasmus)
|
||||
- Added support for constructors in interfaces to force constructor signature
|
||||
checks in implementations. (Marcus)
|
||||
- Added memory_get_peak_usage() function for retrieving peak memory usage of
|
||||
a PHP script. (Ilia)
|
||||
- Added pg_field_table() function. (Edin)
|
||||
- Added SimpleXMLElement::saveXML() as an alias for SimpleXMLElement::asXML().
|
||||
(Hannes)
|
||||
- Added DOMNode::getNodePath() for getting an XPath for a node. (Christian)
|
||||
- Added gmp_nextprime() function. (ants dot aasma at gmail dot com, Tony)
|
||||
- Added error_get_last() function. (Mike)
|
||||
|
||||
- Optimized zend_try/zend_catch macros by eliminating memcpy(3). (Dmitry)
|
||||
- Optimized require_once() and include_once() by eliminating fopen(3)
|
||||
on second usage. (Dmitry)
|
||||
- Optimized request shutdown sequence. Restoring ini directives now iterates
|
||||
only over modified directives instead of all. (Dmitry)
|
||||
|
||||
- Fixed invalid read in imagecreatefrompng when an empty file is given
|
||||
(Pierre, Tony)
|
||||
- Fixed infinite loop when a wrong color index is given to imagefill (Pierre)
|
||||
- Fixed mess with CGI/CLI -d option (now it works with cgi; constants are
|
||||
working exactly like in php.ini; with FastCGI -d affects all requests).
|
||||
(Dmitry)
|
||||
- Fixed missing open_basedir check inside chdir() function. (Ilia)
|
||||
- Fixed overflow on 64bit systems in str_repeat() and wordwrap(). (Stefan E.)
|
||||
- Fixed XSLTProcessor::importStylesheet() to return TRUE on success
|
||||
(Christian)
|
||||
- Fixed leaks in openssl_csr_sign and openssl_csr_new (Pierre)
|
||||
- Fixed phpinfo() cutoff of variables at \0. (Ilia)
|
||||
- Fixed a bug in the filter extension that prevented magic_quotes_gpc from
|
||||
being applied when RAW filter is used. (Ilia)
|
||||
- Fixed memory leaks in openssl streams context options. (Pierre)
|
||||
- Fixed handling of extremely long paths inside tempnam() function. (Ilia)
|
||||
- Fixed bug #38183 (disable_classes=Foobar causes disabled class to be
|
||||
- Fixed bug #39721 (Runtime inheritance causes data corruption). (Dmitry)
|
||||
- Fixed bug #39304 (Segmentation fault with list unpacking of string offset).
|
||||
(Dmitry)
|
||||
- Fixed bug #39192 (Not including nsapi.h properly with SJSWS 7). This will
|
||||
make PHP 5.2 compatible to new Sun Webserver. (Uwe)
|
||||
- Fixed bug #39140 (Uncaught exception may cause crash). (Dmitry)
|
||||
- Fixed bug #39125 (Memleak when reflecting non-existing class/method). (Tony)
|
||||
- Fixed bug #39067 (getDeclaringClass() and private properties). (Tony)
|
||||
- Fixed bug #39039 (SSL: fatal protocol error when fetching HTTPS from servers
|
||||
running Google web server). (Ilia)
|
||||
- Fixed bug #39035 (Compatibility issue between DOM and
|
||||
zend.ze1_compatibility_mode). (Rob)
|
||||
- Fixed bug #39034 (curl_exec() with return transfer returns TRUE on empty
|
||||
files). (Ilia)
|
||||
- Fixed bug #39032 (strcspn() stops on null character). (Tony)
|
||||
- Fixed bug #39020 (PHP in FastCGI server mode crashes). (Dmitry)
|
||||
- Fixed bug #39017 (foreach(($obj = new myClass) as $v); echo $obj;
|
||||
segfaults). (Dmitry)
|
||||
- Fixed bug #39004 (Fixed generation of config.nice with autoconf 2.60). (Ilia)
|
||||
- Fixed bug #39003 (__autoload() is called for type hinting). (Dmitry, Tony)
|
||||
- Fixed bug #39001 (ReflectionProperty returns incorrect declaring class for
|
||||
protected properties). (Tony)
|
||||
- Fixed bug #38996 (PDO_MYSQL doesn't check connections for liveness). (Tony)
|
||||
- Fixed bug #38993 (Fixed safe_mode/open_basedir checks for session.save_path,
|
||||
allowing them to account for extra parameters). (Ilia)
|
||||
- Fixed bug #38989 (Absolute path with slash at beginning doesn't work on win).
|
||||
(Dmitry)
|
||||
- Fixed bug #38985 (Can't cast COM objects). (Wez)
|
||||
- Fixed bug #38981 (using FTP URLs in get_headers() causes crash). (Tony)
|
||||
- Fixed bug #38963 (Fixed a possible open_basedir bypass in tempnam()). (Ilia)
|
||||
- Fixed bug #38961 (metaphone() results in segmentation fault on NetBSD).
|
||||
(Tony)
|
||||
- Fixed bug #38949 (Cannot get xmlns value attribute). (Rob)
|
||||
- Fixed bug #38942 (Double old-style-ctor inheritance). (Dmitry)
|
||||
- Fixed bug #38941 (imap extension does not compile against new version of the
|
||||
imap library). (Ilia)
|
||||
- Fixed bug #38934 (move_uploaded_file() cannot read uploaded file outside of
|
||||
open_basedir). (Ilia)
|
||||
- Fixed bug #38904 (apache2filter changes cwd to /). (Ilia, Hannes)
|
||||
- Fixed bug #38891 (get_headers() do not work with curl-wrappers). (Ilia)
|
||||
- Fixed bug #38882 (ldap_connect causes segfault with newer versions of
|
||||
OpenLDAP). (Tony)
|
||||
- Fixed bug #38859 (parse_url() fails if passing '@' in passwd). (Tony)
|
||||
- Fixed bug #38850 (lookupNamespaceURI doesn't return default namespace). (Rob)
|
||||
- Fixed bug #38844 (curl_easy_strerror() is defined only since cURL 7.12.0).
|
||||
(Tony)
|
||||
- Fixed bug #38813 (DOMEntityReference->__construct crashes when called
|
||||
explicitly). (Rob)
|
||||
- Fixed bug #38808 ("maybe ref" issue for current() and others). (Dmitry)
|
||||
- Fixed bug #38779 (engine crashes when require()'ing file with syntax error
|
||||
through userspace stream wrapper). (Tony, Dmitry)
|
||||
- Fixed bug #38772 (inconsistent overriding of methods in different visibility
|
||||
contexts). (Dmitry)
|
||||
- Fixed bug #38759 (PDO sqlite2 empty query causes segfault). (Tony)
|
||||
- Fixed bug #38721 (Invalid memory read in date_parse()). (Tony, Derick)
|
||||
- Fixed bug #38700 (SoapClient::__getTypes never returns). (Dmitry)
|
||||
- Fixed bug #38693 (curl_multi_add_handle() set curl handle to null). (Ilia)
|
||||
- Fixed bug #38687 (sockaddr local storage insufficient for all sock families).
|
||||
(Sara)
|
||||
- Fixed bug #38661 (mixed-case URL breaks url-wrappers). (Ilia)
|
||||
- Fixed bug #38653 (memory leak in ReflectionClass::getConstant()). (Tony)
|
||||
- Fixed bug #38649 (uninit'd optional arg in stream_socket_sendto()). (Sara)
|
||||
- Fixed bug #38637 (curl_copy_handle() fails to fully copy the cURL handle).
|
||||
(Tony, Ilia)
|
||||
- Fixed bug #38624 (Strange warning when incrementing an object property and
|
||||
exception is thrown from __get method). (Tony)
|
||||
- Fixed bug #38623 (leaks in a tricky code with switch() and exceptions).
|
||||
(Dmitry)
|
||||
- Fixed bug #38579 (include_once() may include the same file twice). (Dmitry)
|
||||
- Fixed bug #38574 (missing curl constants and improper constant detection).
|
||||
(Ilia)
|
||||
- Fixed bug #38543 (shutdown_executor() may segfault when memory_limit is too
|
||||
low). (Dmitry)
|
||||
- Fixed bug #38535 (memory corruption in pdo_pgsql driver on error retrieval
|
||||
inside a failed query executed via query() method). (Ilia)
|
||||
- Fixed bug #38534 (segfault when calling setlocale() in userspace session
|
||||
handler). (Tony)
|
||||
- Fixed bug #38524 (strptime() does not initialize the internal date storage
|
||||
structure). (Ilia)
|
||||
- Fixed bug #38511, #38473, #38263 (Fixed session extension request shutdown
|
||||
order to ensure it is shutdown before the extensions it may depend on).
|
||||
(Ilia)
|
||||
- Fixed bug #38488 (Access to "php://stdin" and family crashes PHP on win32).
|
||||
(Dmitry)
|
||||
- Fixed bug #38474 (getAttribute select attribute by order, even when
|
||||
prefixed). (Rob)
|
||||
- Fixed bug #38467 (--enable-versioning causes make fail on OS X). (Tony)
|
||||
- Fixed bug #38465 (ReflectionParameter fails if default value is an access
|
||||
to self::). (Johannes)
|
||||
- Fixed bug #38464 (array_count_values() mishandles numeric strings).
|
||||
(Matt Wilmas, Ilia)
|
||||
- Fixed bug #38461 (setting private attribute with __set() produces
|
||||
segfault). (Tony)
|
||||
- Fixed bug #38458, PECL bug #8944, PECL bug #7775 (error retrieving columns
|
||||
after long/text columns with PDO_ODBC). (Wez)
|
||||
- Fixed bug #38454 (warning upon disabling handler via
|
||||
xml_set_element_handler). (dtorop933 at gmail dot com, Rob)
|
||||
- Fixed bug #38451 (PDO_MYSQL doesn't compile on Solaris). (Tony)
|
||||
- Fixed bug #38450 (constructor is not called for classes used in userspace
|
||||
stream wrappers). (Tony)
|
||||
- Fixed bug #38438 (DOMNodeList->item(0) segfault on empty NodeList). (Ilia)
|
||||
- Fixed bug #38431 (xmlrpc_get_type() crashes PHP on objects). (Tony)
|
||||
- Fixed bug #38427 (unicode causes xml_parser to misbehave). (Rob)
|
||||
- Fixed bug #38424 (Different attribute assignment if new or existing). (Rob)
|
||||
- Fixed bug #38400 (Use of com.typelib_file may cause a crash). (Ilia)
|
||||
- Fixed bug #38394 (PDO fails to recover from failed prepared statement
|
||||
execution). (Ilia)
|
||||
- Fixed bug #38377 (session_destroy() gives warning after
|
||||
session_regenerate_id()). (Ilia)
|
||||
- Implemented #38357 (dbase_open can't open DBase 3 dbf file).
|
||||
(rodrigo at fabricadeideias dot com, Mike)
|
||||
- Fixed bug #38354 (Unwanted reformatting of XML when using AsXML). (Christian)
|
||||
- Fixed bug #38347 (Segmentation fault when using foreach with an unknown/empty
|
||||
SimpleXMLElement). (Tony)
|
||||
- Fixed bug #38322 (reading past array in sscanf() leads to arbitrary code
|
||||
execution). (Tony)
|
||||
- Fixed bug #38315 (Constructing in the destructor causes weird behavior).
|
||||
(Dmitry)
|
||||
- Fixed bug #38303 (spl_autoload_register() suppress all errors silently).
|
||||
(Ilia)
|
||||
- Fixed bug #38290 (configure script ignores --without-cdb,inifile,flatfile).
|
||||
(Marcus)
|
||||
- Fixed bug #38289 (segfault in session_decode() when _SESSION is NULL).
|
||||
(Tony)
|
||||
- Fixed bug #38287 (static variables mess up global vars). (Dmitry)
|
||||
- Fixed bug #38278 (session_cache_expire()'s value does not match phpinfo's
|
||||
session.cache_expire). (Tony)
|
||||
- Fixed bug #38276 (file_exists() works incorrectly with long filenames
|
||||
on Windows). (Ilia, Tony)
|
||||
- Fixed bug #38269 (fopen wrapper doesn't fail on invalid hostname with
|
||||
curlwrappers enabled). (Tony)
|
||||
- Fixed bug #38265 (heap corruption). (Dmitry)
|
||||
- Fixed bug #38261 (openssl_x509_parse() leaks with invalid cert) (Pierre)
|
||||
- Fixed bug #38255 (openssl possible leaks while passing keys) (Pierre)
|
||||
- Fixed bug #38253 (PDO produces segfault with default fetch mode). (Tony)
|
||||
- Fixed bug #38251 (socket_select() and invalid arguments). (Tony)
|
||||
- Fixed bug #38236 (Binary data gets corrupted on multipart/formdata POST).
|
||||
(Ilia)
|
||||
- Fixed bug #38234 (Exception in __clone makes memory leak). (Dmitry, Nuno)
|
||||
- Fixed bug #38229 (strtotime() does not parse YYYY-MM format). (Ilia)
|
||||
- Fixed bug #38224 (session extension can't handle broken cookies). (Ilia)
|
||||
- Fixed bug #38220 (Crash on some object operations). (Dmitry)
|
||||
- Fixed bug #38217 (ReflectionClass::newInstanceArgs() tries to allocate too
|
||||
much memory). (Tony)
|
||||
- Fixed bug #38214 (gif interlace output cannot work). (Pierre)
|
||||
- Fixed bug #38213, #37611, #37571 (wddx encoding fails to handle certain
|
||||
characters). (Ilia)
|
||||
- Fixed bug #38212 (Segfault on invalid imagecreatefromgd2part() parameters).
|
||||
(Pierre)
|
||||
- Fixed bug #38211 (variable name and cookie name match breaks script
|
||||
execution). (Dmitry)
|
||||
- Fixed bug #38199 (fclose() unable to close STDOUT and STDERR). (Tony)
|
||||
- Fixed bug #38198 (possible crash when COM reports an exception). (Ilia)
|
||||
- Fixed bug #38194 (ReflectionClass::isSubclassOf() returns TRUE for the
|
||||
class itself). (Ilia)
|
||||
- Fixed bug #38183 (disable_classes=Foobar causes disabled class to be
|
||||
called Foo). (Jani)
|
||||
- Fixed bug #38179 (imagecopy from a palette to a truecolor image loose
|
||||
alpha channel) (Pierre)
|
||||
- Fixed bug #38146 (Cannot use array returned from foo::__get('bar') in write
|
||||
- Fixed bug #38179 (imagecopy from a palette to a truecolor image loose alpha
|
||||
channel) (Pierre)
|
||||
- Fixed bug #38173 (Freeing nested cursors causes OCI8 to segfault). (Tony)
|
||||
- Fixed bug #38168 (Crash in pdo_pgsql on missing bound parameters). (Ilia)
|
||||
- Fixed bug #38161 (oci_bind_by_name() returns garbage when Oracle didn't set
|
||||
the variable). (Tony)
|
||||
- Fixed bug #38146 (Cannot use array returned from foo::__get('bar') in write
|
||||
context). (Dmitry)
|
||||
- Fixed bug #38132 (ReflectionClass::getStaticProperties() retains \0 in key
|
||||
names). (Ilia)
|
||||
- Fixed bug #38125 (undefined reference to spl_dual_it_free_storage). (Marcus)
|
||||
- Fixed bug #38086 (stream_copy_to_stream() returns 0 when maxlen is bigger
|
||||
- Fixed bug #38112 (corrupted gif segfaults) (Pierre)
|
||||
- Fixed bug #38096 (large timeout values ignored on 32bit machines in
|
||||
stream_socket_accept() and stream_socket_client()). (Ilia)
|
||||
- Fixed bug #38086 (stream_copy_to_stream() returns 0 when maxlen is bigger
|
||||
than the actual length). (Tony)
|
||||
- Fixed bug #38072 (boolean arg for mysqli_autocommit() is always true on
|
||||
- Fixed bug #38072 (boolean arg for mysqli_autocommit() is always true on
|
||||
Solaris). (Tony)
|
||||
- Fixed bug #38067 (Parameters are not decoded from utf-8 when using encoding
|
||||
- Fixed bug #38067 (Parameters are not decoded from utf-8 when using encoding
|
||||
option). (Dmitry)
|
||||
- Fixed bug #38064 (ignored constructor visibility). (Marcus)
|
||||
- Fixed bug #38055 (Wrong interpretation of boolean parameters). (Dmitry)
|
||||
- Fixed bug #38047 ("file" and "line" sometimes not set in backtrace from
|
||||
inside error handler). (Dmitry)
|
||||
- Fixed bug #38019 (segfault extending mysqli class). (Dmitry)
|
||||
- Fixed bug #38005 (SoapFault faultstring doesn't follow encoding rules).
|
||||
(Dmitry)
|
||||
- Fixed bug #38004 (Parameters in SoapServer are decoded twice). (Dmitry)
|
||||
- Fixed bug #38003 (in classes inherited from MySQLi it's possible to call
|
||||
- Fixed bug #38003 (in classes inherited from MySQLi it's possible to call
|
||||
private constructors from invalid context). (Tony)
|
||||
- Fixed bug #37987 (invalid return of file_exists() in safe mode). (Ilia)
|
||||
- Fixed bug #37947 (zend_ptr_stack reallocation problem). (Dmitry)
|
||||
- Fixed bug #37945 (pathinfo() cannot handle argument with special characters
|
||||
like german "Umlaute"). (Mike)
|
||||
- Fixed bug #37931 (possible crash in OCI8 after database restart
|
||||
- Fixed bug #37945 (pathinfo() cannot handle argument with special characters
|
||||
like German "Umlaut"). (Mike)
|
||||
- Fixed bug #37931 (possible crash in OCI8 after database restart
|
||||
when using persistent connections). (Tony)
|
||||
- Fixed bug #37923 (Display constant value in reflection::export). (Johannes)
|
||||
- Fixed bug #37920 (compilation problems on z/OS). (Tony)
|
||||
- Fixed bug #37870 (pgo_pgsql tries to de-allocate unused statements).
|
||||
(Ilia, ce at netage dot bg)
|
||||
- Fixed bug #37864 (file_get_contents() leaks on empty file). (Hannes)
|
||||
- Fixed bug #37862 (Integer pointer comparison to numeric value).
|
||||
(bugs-php at thewrittenword dot com)
|
||||
- Fixed bug #37846 (wordwrap() wraps incorrectly). (ddk at krasn dot ru, Tony)
|
||||
- Fixed bug #37816 (ReflectionProperty does not throw exception when accessing
|
||||
protected attribute). (Marcus)
|
||||
- Fixed bug #37811 (define not using toString on objects). (Marcus)
|
||||
@@ -140,9 +739,11 @@ PHP NEWS
|
||||
- Fixed bug #37806 (weird behavior of object type and comparison). (Marcus)
|
||||
- Fixed bug #37780 (memory leak trying to execute a non existing file (CLI)).
|
||||
(Mike)
|
||||
- Fixed bug #37779 (empty include_path leads to search for files inside /).
|
||||
(jr at terragate dot net, Ilia)
|
||||
- Fixed bug #37747 (strtotime segfaults when given "nextyear"). (Derick)
|
||||
- Fixed bug #37720 (merge_php_config scrambles values). (Mike,
|
||||
pumuckel at metropolis dot de)
|
||||
- Fixed bug #37720 (merge_php_config scrambles values).
|
||||
(Mike, pumuckel at metropolis dot de)
|
||||
- Fixed bug #37709 (Possible crash in PDO::errorCode()). (Ilia)
|
||||
- Fixed bug #37707 (clone without assigning leaks memory). (Ilia, Nuno, Dmitri)
|
||||
- Fixed bug #37705 (Semaphore constants not available). (Ilia)
|
||||
@@ -150,84 +751,114 @@ PHP NEWS
|
||||
- Fixed bug #37667 (Object is not added into array returned by __get). (Marcus)
|
||||
- Fixed bug #37635 (parameter of pcntl signal handler is trashed). (Mike)
|
||||
- Fixed bug #37632 (Protected method access problem). (Marcus)
|
||||
- Fixed bug #37630 (MySQL extensions should link against thread safe client
|
||||
- Fixed bug #37630 (MySQL extensions should link against thread safe client
|
||||
libs if built with ZTS). (Mike)
|
||||
- Fixed bug #37620 (mysqli_ssl_set validation is inappropriate). (Georg)
|
||||
- Fixed bug #37616 (DATE_RFC822 does not product RFC 822 dates).
|
||||
(Hannes Magnusson, Derick)
|
||||
- Fixed bug #37614 (Class name lowercased in error message). (Johannes)
|
||||
- Fixed bug #37587 (var without attribute causes segfault). (Marcus)
|
||||
- Fixed bug #37586 (Bumped minimum PCRE version to 6.6, needed for recursion
|
||||
- Fixed bug #37586 (Bumped minimum PCRE version to 6.6, needed for recursion
|
||||
limit support). (Ilia)
|
||||
- Fixed bug #37581 (oci_bind_array_by_name clobbers input array when using
|
||||
SQLT_AFC, AVC). (Tony)
|
||||
- Fixed bug #37569 (WDDX incorrectly encodes high-ascii characters). (Ilia)
|
||||
- Fixed bug #37565 (Using reflection::export with simplexml causing a crash).
|
||||
(Marcus)
|
||||
- Fixed bug #37564 (AES privacy encryption not possible due to net-snmp 5.2
|
||||
compatibility issue). (Jani, patch by scott dot moynes+php at gmail dot com)
|
||||
- Fixed bug #37563 (array_key_exists performance is poor for &$array). (Ilia)
|
||||
- Fixed bug #37558 (timeout functionality doesn't work after a second PHP
|
||||
startup on the same thread). (p dot desarnaud at wanadoo dot fr)
|
||||
- Fixed bug #37558 (timeout functionality doesn't work after a second PHP
|
||||
start-up on the same thread). (p dot desarnaud at wanadoo dot fr)
|
||||
- Fixed bug #37531 (oci8 persistent connection corruption). (Tony)
|
||||
- Fixed bug #37523 (namespaces added too late, leads to missing xsi:type
|
||||
attributes. incompatibility with libxml2-2.6.24). (Dmitry)
|
||||
- Fixed bug #37523 (namespaces added too late, leads to missing xsi:type
|
||||
attributes. Incompatibility with libxml2-2.6.24). (Dmitry)
|
||||
- Fixed bug #37514 (strtotime doesn't assume year correctly). (Derick)
|
||||
- Fixed bug #37510 (session_regenerate_id changes session_id() even on
|
||||
- Fixed bug #37510 (session_regenerate_id changes session_id() even on
|
||||
failure). (Hannes)
|
||||
- Fixed bug #37505 (touch() truncates large files). (Ilia)
|
||||
- Fixed bug #37499 (CLI segmentation faults during cleanup with sybase-ct
|
||||
- Fixed bug #37499 (CLI segmentation faults during cleanup with sybase-ct
|
||||
extension enabled). (Tony)
|
||||
- Fixed bug #37496 (FastCGI output buffer overrun). (Piotr, Dmitry)
|
||||
- Fixed bug #37487 (oci_fetch_array() array-type should always default to
|
||||
- Fixed bug #37487 (oci_fetch_array() array-type should always default to
|
||||
OCI_BOTH). (Tony)
|
||||
- Fixed bug #37457 (Crash when an exception is thrown in accept() method of
|
||||
- Fixed bug #37457 (Crash when an exception is thrown in accept() method of
|
||||
FilterIterator). (Marcus)
|
||||
- Fixed bug #37456 (DOMElement->setAttribute() loops forever). (Rob)
|
||||
- Fixed bug #37428 (PHP crashes on windows if there are startup errors
|
||||
and event log is used for logging them). (Edin)
|
||||
- Fixed bug #37445 (Fixed crash in pdo_mysql resulting from premature object
|
||||
destruction). (Ilia)
|
||||
- Fixed bug #37428 (PHP crashes on windows if there are start-up errors and
|
||||
event log is used for logging them). (Edin)
|
||||
- Fixed bug #37418 (tidy module crashes on shutdown). (Tony)
|
||||
- Fixed bug #37416 (iterator_to_array() hides exceptions thrown in rewind()
|
||||
method). (Tony)
|
||||
- Fixed bug #37413 (Rejected versions of flex that don't work). (Ilia)
|
||||
- Fixed bug #37395 (recursive mkdir() fails to create nonexistent directories
|
||||
- Fixed bug #37395 (recursive mkdir() fails to create nonexistent directories
|
||||
in root dir). (Tony)
|
||||
- Fixed bug #37394 (substr_compare() returns an error when offset equals
|
||||
- Fixed bug #37394 (substr_compare() returns an error when offset equals
|
||||
string length). (Ilia)
|
||||
- Fixed bug #37392 (Unnecessary call to OCITransRollback() at the end of
|
||||
- Fixed bug #37392 (Unnecessary call to OCITransRollback() at the end of
|
||||
request). (Tony)
|
||||
- Fixed bug #37376 (fastcgi.c compile fail with gcc 2.95.4). (Ilia)
|
||||
- Fixed bug #37368 (Incorrect timestamp returned for strtotime()). (Derick)
|
||||
- Fixed bug #37363 (PDO_MYSQL does not build if no other mysql extension is
|
||||
- Fixed bug #37363 (PDO_MYSQL does not build if no other mysql extension is
|
||||
enabled). (Mike)
|
||||
- Fixed bug #37348 (make PEAR install ignore open_basedir). (Ilia)
|
||||
- Fixed bug #37341 ($_SERVER in included file is shortened to two entries,
|
||||
- Fixed bug #37341 ($_SERVER in included file is shortened to two entries,
|
||||
if $_ENV gets used). (Dmitry)
|
||||
- Fixed bug #37313 (sigemptyset() used without including <signal.h>).
|
||||
(jdolecek)
|
||||
- Fixed bug #37306 (max_execution_time = max_input_time). (Dmitry)
|
||||
- Fixed Bug #37278 (SOAP not respecting uri in __soapCall). (Dmitry)
|
||||
- Fixed bug #37278 (SOAP not respecting uri in __soapCall). (Dmitry)
|
||||
- Fixed bug #37265 (Added missing safe_mode & open_basedir checks to
|
||||
imap_body()). (Ilia)
|
||||
- Fixed bug #37262 (var_export() does not escape \0 character). (Ilia)
|
||||
- Fixed bug #37256 (php-fastcgi doesn't handle connection abort). (Dmitry)
|
||||
- Fixed bug #37244 (Added strict flag to base64_decode() that enforces
|
||||
- Fixed bug #37244 (Added strict flag to base64_decode() that enforces
|
||||
RFC3548 compliance). (Ilia)
|
||||
- Fixed bug #37144 (PHP crashes trying to assign into property of dead object).
|
||||
(Dmitry)
|
||||
- Fixed bug #36949 (invalid internal mysqli objects dtor). (Mike)
|
||||
- Implement #36732 (req/x509 extensions support for openssl_csr_new and
|
||||
openssl_csr_sign) (ben at psc dot edu, Pierre)
|
||||
- Fixed bug #36759 (Objects destructors are invoked in wrong order when script
|
||||
is finished). (Dmitry)
|
||||
- Fixed bug #36681 (pdo_pgsql driver incorrectly ignored some errors).
|
||||
(Wez, Ilia)
|
||||
- Fixed bug #36630 (umask not reset at the end of the request). (Ilia)
|
||||
- Fixed bug #35886 (file_get_contents() fails with some
|
||||
combinations of offset & maxlen). (Nuno)
|
||||
- Fixed bug #35512 (Lack of read permission on main script results in
|
||||
- Fixed bug #36515 (Unlinking buckets from non-existent brigades). (Sara)
|
||||
- Fixed bug #35973 (Error ORA-24806 occurs when trying to fetch a NCLOB
|
||||
field). (Tony)
|
||||
- Fixed bug #35886 (file_get_contents() fails with some combinations of
|
||||
offset & maxlen). (Nuno)
|
||||
- Fixed bug #35512 (Lack of read permission on main script results in
|
||||
E_WARNING rather then E_ERROR). (Ilia)
|
||||
- Fixed bug #34180 (--with-curlwrappers causes PHP to disregard some HTTP
|
||||
- Fixed bug #34180 (--with-curlwrappers causes PHP to disregard some HTTP
|
||||
stream context options). (Mike)
|
||||
- Fixed bug #34066 (recursive array_walk causes segfault). (Tony)
|
||||
- Fixed bug #34065 (throw in foreach causes memory leaks). (Dmitry)
|
||||
- Fixed bug #34005 (oci_password_change() fails).
|
||||
(pholdaway at technocom-wireless dot com, Tony)
|
||||
- Fixed bug #29538 (number_format and problem with 0). (Matthew Wilmas)
|
||||
- Fixed bug #33895 (Missing math constants). (Hannes)
|
||||
- Fixed bug #33770 (https:// or ftps:// do not work when --with-curlwrappers
|
||||
is used and ssl certificate is not verifiable). (Ilia)
|
||||
- Fixed bug #29538 (number_format and problem with 0). (Matt Wilmas)
|
||||
- Implement #28382 (openssl_x509_parse() extensions support) (Pierre)
|
||||
- Fixed PECL bug #9061 (oci8 might reuse wrong persistent connection). (Tony)
|
||||
- Fixed PECL bug #8816 (issue in php_oci_statement_fetch with more than one
|
||||
piecewise column) (jeff at badtz-maru dot com, Tony)
|
||||
- Fixed PECL bug #8112 (OCI8 persistent connections misbehave when Apache
|
||||
process times out). (Tony)
|
||||
- Fixed PECL bug #7755 (error selecting DOUBLE fields with PDO_ODBC).
|
||||
("slaws", Wez)
|
||||
|
||||
|
||||
04 May 2006, PHP 5.1.4
|
||||
- Added "capture_peer_cert" and "capture_peer_cert_chain" context options
|
||||
for SSL streams. (Wez).
|
||||
- Added PDO::PARAM_EVT_* family of constants. (Sara)
|
||||
- Fixed possible crash in highlight_string(). (Dmitry)
|
||||
- Fixed bug #37291 (FastCGI now longer works with isapi_fcgi.dll). (Dmitry)
|
||||
- Fixed bug #37291 (FastCGI no longer works with isapi_fcgi.dll). (Dmitry)
|
||||
- Fixed bug #37277 (cloning Dom Documents or Nodes does not work). (Rob)
|
||||
- Fixed bug #37276 (problems with $_POST array). (Dmitry)
|
||||
- Fixed bug #36632 (bad error reporting for pdo_odbc exec UPDATE). (Wez).
|
||||
|
||||
@@ -51,8 +51,8 @@ Type specifiers
|
||||
passed to it.
|
||||
/ - use SEPARATE_ZVAL_IF_NOT_REF() on the parameter it follows
|
||||
! - the parameter it follows can be of specified type or NULL (only applies
|
||||
to 'a', 'o', 'O', 'r', and 'z'). If NULL is passed, the results
|
||||
pointer is set to NULL as well.
|
||||
to 's', 'a', 'o', 'O', 'r', 'h', 'C', 'z', and 'Z'). If NULL is passed,
|
||||
the results pointer is set to NULL as well.
|
||||
|
||||
Examples
|
||||
--------
|
||||
|
||||
+1006
-35
File diff suppressed because it is too large.
Load diff
+4
-1
@@ -10,7 +10,10 @@ The Input Filter support in PHP 5 is aimed at providing the framework
|
||||
through which a company-wide or site-wide security policy can be
|
||||
enforced. It is implemented as a SAPI hook and is called from the
|
||||
treat_data and post handler functions. To implement your own security
|
||||
policy you will need to write a standard PHP extension.
|
||||
policy you will need to write a standard PHP extension. There is also
|
||||
a powerful standard implementation in ext/filter that should suit most
|
||||
peoples' needs. However, if you want to implement your own security
|
||||
policy, read on.
|
||||
|
||||
A simple implementation might look like the following. This stores the
|
||||
original raw user data and adds a my_get_raw() function while the normal
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2006, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2007, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2006, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2007, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
+8
-5
@@ -7,11 +7,15 @@
|
||||
* on Windows 95/NT.
|
||||
*/
|
||||
|
||||
#define _WIN32_WINNT 0x0400
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
#include <io.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <direct.h>
|
||||
|
||||
/* struct dirent - same as Unix */
|
||||
|
||||
@@ -25,10 +29,10 @@ struct dirent {
|
||||
|
||||
/* typedef DIR - not the same as Unix */
|
||||
typedef struct {
|
||||
long handle; /* _findfirst/_findnext handle */
|
||||
HANDLE handle; /* _findfirst/_findnext handle */
|
||||
short offset; /* offset into directory */
|
||||
short finished; /* 1 if there are not more files */
|
||||
struct _finddata_t fileinfo; /* from _findfirst/_findnext */
|
||||
WIN32_FIND_DATA fileinfo; /* from _findfirst/_findnext */
|
||||
char *dir; /* the dir we are reading */
|
||||
struct dirent dent; /* the dirent to return */
|
||||
} DIR;
|
||||
@@ -38,7 +42,6 @@ DIR *opendir(const char *);
|
||||
struct dirent *readdir(DIR *);
|
||||
int readdir_r(DIR *, struct dirent *, struct dirent **);
|
||||
int closedir(DIR *);
|
||||
void rewinddir(DIR *);
|
||||
|
||||
int rewinddir(DIR *);
|
||||
|
||||
#endif /* READDIR_H */
|
||||
@@ -68,7 +68,6 @@ AC_DEFUN([TSRM_CHECK_ST],[
|
||||
])
|
||||
|
||||
sinclude(threads.m4)
|
||||
sinclude(TSRM/threads.m4)
|
||||
|
||||
AC_DEFUN([TSRM_CHECK_PTHREADS],[
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+329
-193
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -35,11 +35,6 @@
|
||||
#ifdef TSRM_WIN32
|
||||
#include <io.h>
|
||||
#include "tsrm_win32.h"
|
||||
# if HAVE_NEWAPIS_H
|
||||
# define WANT_GETLONGPATHNAME_WRAPPER
|
||||
# define COMPILE_NEWAPIS_STUBS
|
||||
# include <NewAPIs.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef NETWARE
|
||||
@@ -140,11 +135,93 @@ static int php_check_dots(const char *element, int n)
|
||||
#define CWD_STATE_FREE(s) \
|
||||
free((s)->cwd);
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf)
|
||||
{
|
||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||
__int64 t;
|
||||
|
||||
if (!GetFileAttributesEx(path, GetFileExInfoStandard, &data)) {
|
||||
return stat(path, buf);
|
||||
}
|
||||
|
||||
if (path[1] == ':') {
|
||||
if (path[0] >= 'A' && path[0] <= 'Z') {
|
||||
buf->st_dev = buf->st_rdev = path[0] - 'A';
|
||||
} else {
|
||||
buf->st_dev = buf->st_rdev = path[0] - 'a';
|
||||
}
|
||||
} else {
|
||||
char cur_path[MAXPATHLEN+1];
|
||||
DWORD len = sizeof(cur_path);
|
||||
char *tmp = cur_path;
|
||||
|
||||
while(1) {
|
||||
DWORD r = GetCurrentDirectory(len, tmp);
|
||||
if (r < len) {
|
||||
if (tmp[1] == ':') {
|
||||
if (path[0] >= 'A' && path[0] <= 'Z') {
|
||||
buf->st_dev = buf->st_rdev = path[0] - 'A';
|
||||
} else {
|
||||
buf->st_dev = buf->st_rdev = path[0] - 'a';
|
||||
}
|
||||
} else {
|
||||
buf->st_dev = buf->st_rdev = -1;
|
||||
}
|
||||
break;
|
||||
} else if (!r) {
|
||||
buf->st_dev = buf->st_rdev = -1;
|
||||
break;
|
||||
} else {
|
||||
len = r+1;
|
||||
tmp = (char*)malloc(len);
|
||||
}
|
||||
}
|
||||
if (tmp != cur_path) {
|
||||
free(tmp);
|
||||
}
|
||||
}
|
||||
buf->st_uid = buf->st_gid = buf->st_ino = 0;
|
||||
buf->st_mode = (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? (S_IFDIR|S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6)) : S_IFREG;
|
||||
buf->st_mode |= (data.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? (S_IREAD|(S_IREAD>>3)|(S_IREAD>>6)) : (S_IREAD|(S_IREAD>>3)|(S_IREAD>>6)|S_IWRITE|(S_IWRITE>>3)|(S_IWRITE>>6));
|
||||
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0) {
|
||||
int len = strlen(path);
|
||||
|
||||
if (path[len-4] == '.') {
|
||||
if (_memicmp(path+len-3, "exe", 3) == 0 ||
|
||||
_memicmp(path+len-3, "com", 3) == 0 ||
|
||||
_memicmp(path+len-3, "bat", 3) == 0 ||
|
||||
_memicmp(path+len-3, "cmd", 3) == 0) {
|
||||
buf->st_mode |= (S_IEXEC|(S_IEXEC>>3)|(S_IEXEC>>6));
|
||||
}
|
||||
}
|
||||
}
|
||||
buf->st_nlink = 1;
|
||||
t = data.nFileSizeHigh;
|
||||
t = t << 32;
|
||||
t |= data.nFileSizeLow;
|
||||
buf->st_size = t;
|
||||
t = data.ftLastAccessTime.dwHighDateTime;
|
||||
t = t << 32;
|
||||
t |= data.ftLastAccessTime.dwLowDateTime;
|
||||
buf->st_atime = (unsigned long)((t / 10000000) - 11644473600);
|
||||
t = data.ftCreationTime.dwHighDateTime;
|
||||
t = t << 32;
|
||||
t |= data.ftCreationTime.dwLowDateTime;
|
||||
buf->st_ctime = (unsigned long)((t / 10000000) - 11644473600);
|
||||
t = data.ftLastWriteTime.dwHighDateTime;
|
||||
t = t << 32;
|
||||
t |= data.ftLastWriteTime.dwLowDateTime;
|
||||
buf->st_mtime = (unsigned long)((t / 10000000) - 11644473600);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int php_is_dir_ok(const cwd_state *state)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
|
||||
if (php_sys_stat(state->cwd, &buf) == 0 && S_ISDIR(buf.st_mode))
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
@@ -154,7 +231,7 @@ static int php_is_file_ok(const cwd_state *state)
|
||||
{
|
||||
struct stat buf;
|
||||
|
||||
if (stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
|
||||
if (php_sys_stat(state->cwd, &buf) == 0 && S_ISREG(buf.st_mode))
|
||||
return (0);
|
||||
|
||||
return (1);
|
||||
@@ -172,18 +249,7 @@ static void cwd_globals_ctor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
|
||||
static void cwd_globals_dtor(virtual_cwd_globals *cwd_globals TSRMLS_DC)
|
||||
{
|
||||
CWD_STATE_FREE(&cwd_globals->cwd);
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(cwd_globals->realpath_cache)/sizeof(cwd_globals->realpath_cache[0]); i++) {
|
||||
realpath_cache_bucket *p = cwd_globals->realpath_cache[i];
|
||||
while (p != NULL) {
|
||||
realpath_cache_bucket *r = p;
|
||||
p = p->next;
|
||||
free(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
realpath_cache_clean(TSRMLS_C);
|
||||
}
|
||||
|
||||
static char *tsrm_strndup(const char *s, size_t length)
|
||||
@@ -306,14 +372,51 @@ CWD_API char *virtual_getcwd(char *buf, size_t size TSRMLS_DC)
|
||||
|
||||
static inline unsigned long realpath_cache_key(const char *path, int path_len)
|
||||
{
|
||||
register unsigned long h;
|
||||
register unsigned long h;
|
||||
const char *e = path + path_len;
|
||||
|
||||
const char *e = path + path_len;
|
||||
for (h = 2166136261U; path < e; ) {
|
||||
h *= 16777619;
|
||||
h ^= *path++;
|
||||
}
|
||||
return h;
|
||||
for (h = 2166136261U; path < e;) {
|
||||
h *= 16777619;
|
||||
h ^= *path++;
|
||||
}
|
||||
|
||||
return h;
|
||||
}
|
||||
|
||||
CWD_API void realpath_cache_clean(TSRMLS_D)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(CWDG(realpath_cache))/sizeof(CWDG(realpath_cache)[0]); i++) {
|
||||
realpath_cache_bucket *p = CWDG(realpath_cache)[i];
|
||||
while (p != NULL) {
|
||||
realpath_cache_bucket *r = p;
|
||||
p = p->next;
|
||||
free(r);
|
||||
}
|
||||
CWDG(realpath_cache)[i] = NULL;
|
||||
}
|
||||
CWDG(realpath_cache_size) = 0;
|
||||
}
|
||||
|
||||
CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC)
|
||||
{
|
||||
unsigned long key = realpath_cache_key(path, path_len);
|
||||
unsigned long n = key % (sizeof(CWDG(realpath_cache)) / sizeof(CWDG(realpath_cache)[0]));
|
||||
realpath_cache_bucket **bucket = &CWDG(realpath_cache)[n];
|
||||
|
||||
while (*bucket != NULL) {
|
||||
if (key == (*bucket)->key && path_len == (*bucket)->path_len &&
|
||||
memcmp(path, (*bucket)->path, path_len) == 0) {
|
||||
realpath_cache_bucket *r = *bucket;
|
||||
*bucket = (*bucket)->next;
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
free(r);
|
||||
return;
|
||||
} else {
|
||||
bucket = &(*bucket)->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline void realpath_cache_add(const char *path, int path_len, const char *realpath, int realpath_len, time_t t TSRMLS_DC)
|
||||
@@ -334,7 +437,7 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
|
||||
n = bucket->key % (sizeof(CWDG(realpath_cache)) / sizeof(CWDG(realpath_cache)[0]));
|
||||
bucket->next = CWDG(realpath_cache)[n];
|
||||
CWDG(realpath_cache)[n] = bucket;
|
||||
CWDG(realpath_cache_size) += size;
|
||||
CWDG(realpath_cache_size) += size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,23 +469,11 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath)
|
||||
{
|
||||
int path_length = strlen(path);
|
||||
char *ptr, *path_copy;
|
||||
char *tok = NULL;
|
||||
int ptr_length;
|
||||
cwd_state old_state;
|
||||
int ret = 0;
|
||||
int copy_amount = -1;
|
||||
char *free_path;
|
||||
unsigned char is_absolute = 0;
|
||||
#ifndef TSRM_WIN32
|
||||
char resolved_path[MAXPATHLEN];
|
||||
#else
|
||||
char *new_path;
|
||||
#endif
|
||||
char orig_path[MAXPATHLEN];
|
||||
int orig_path_len = 0;
|
||||
realpath_cache_bucket *bucket;
|
||||
time_t t = 0;
|
||||
int ret;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (path_length == 0)
|
||||
@@ -390,21 +481,36 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
if (path_length >= MAXPATHLEN)
|
||||
return (1);
|
||||
|
||||
if (use_realpath && CWDG(realpath_cache_size_limit)) {
|
||||
if (IS_ABSOLUTE_PATH(path, path_length) || (state->cwd_length < 1)) {
|
||||
memcpy(orig_path, path, path_length+1);
|
||||
orig_path_len = path_length;
|
||||
} else {
|
||||
orig_path_len = path_length + state->cwd_length + 1;
|
||||
if (orig_path_len >= MAXPATHLEN) {
|
||||
return 1;
|
||||
}
|
||||
memcpy(orig_path, state->cwd, state->cwd_length);
|
||||
orig_path[state->cwd_length] = DEFAULT_SLASH;
|
||||
memcpy(orig_path + state->cwd_length + 1, path, path_length + 1);
|
||||
#if VIRTUAL_CWD_DEBUG
|
||||
fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
|
||||
#endif
|
||||
|
||||
/* cwd_length can be 0 when getcwd() fails.
|
||||
* This can happen under solaris when a dir does not have read permissions
|
||||
* but *does* have execute permissions */
|
||||
if (!IS_ABSOLUTE_PATH(path, path_length) && (state->cwd_length > 0)) {
|
||||
int orig_path_len;
|
||||
int state_cwd_length = state->cwd_length;
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
if (IS_SLASH(path[0])) {
|
||||
state_cwd_length = 2;
|
||||
}
|
||||
#endif
|
||||
orig_path_len = path_length + state_cwd_length + 1;
|
||||
if (orig_path_len >= MAXPATHLEN) {
|
||||
return 1;
|
||||
}
|
||||
memcpy(orig_path, state->cwd, state_cwd_length);
|
||||
orig_path[state_cwd_length] = DEFAULT_SLASH;
|
||||
memcpy(orig_path + state_cwd_length + 1, path, path_length + 1);
|
||||
path = orig_path;
|
||||
path_length = orig_path_len;
|
||||
}
|
||||
|
||||
if (use_realpath != CWD_EXPAND && CWDG(realpath_cache_size_limit)) {
|
||||
t = CWDG(realpath_cache_ttl)?time(NULL):0;
|
||||
if ((bucket = realpath_cache_find(orig_path, orig_path_len, t TSRMLS_CC)) != NULL) {
|
||||
if ((bucket = realpath_cache_find(path, path_length, t TSRMLS_CC)) != NULL) {
|
||||
int len = bucket->realpath_len;
|
||||
|
||||
CWD_STATE_COPY(&old_state, state);
|
||||
@@ -421,107 +527,62 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (use_realpath != CWD_EXPAND) {
|
||||
#if !defined(TSRM_WIN32) && !defined(NETWARE)
|
||||
/* cwd_length can be 0 when getcwd() fails.
|
||||
* This can happen under solaris when a dir does not have read permissions
|
||||
* but *does* have execute permissions */
|
||||
if (IS_ABSOLUTE_PATH(path, path_length) || (state->cwd_length < 1)) {
|
||||
if (use_realpath) {
|
||||
if (realpath(path, resolved_path)) { /* Note: Not threadsafe on older *BSD's */
|
||||
path = resolved_path;
|
||||
path_length = strlen(path);
|
||||
} else {
|
||||
/* disable for now
|
||||
return 1; */
|
||||
char resolved_path[MAXPATHLEN];
|
||||
|
||||
if (!realpath(path, resolved_path)) { /* Note: Not threadsafe on older *BSD's */
|
||||
if (use_realpath == CWD_REALPATH) {
|
||||
return 1;
|
||||
}
|
||||
goto no_realpath;
|
||||
}
|
||||
} else { /* Concat current directory with relative path and then run realpath() on it */
|
||||
char *tmp;
|
||||
char *ptr;
|
||||
CWD_STATE_COPY(&old_state, state);
|
||||
|
||||
ptr = tmp = (char *) malloc(state->cwd_length+path_length+sizeof("/"));
|
||||
if (!tmp) {
|
||||
return 1;
|
||||
}
|
||||
memcpy(ptr, state->cwd, state->cwd_length);
|
||||
ptr += state->cwd_length;
|
||||
*ptr++ = DEFAULT_SLASH;
|
||||
memcpy(ptr, path, path_length);
|
||||
ptr += path_length;
|
||||
*ptr = '\0';
|
||||
if (strlen(tmp) >= MAXPATHLEN) {
|
||||
free(tmp);
|
||||
return 1;
|
||||
}
|
||||
if (use_realpath) {
|
||||
if (realpath(tmp, resolved_path)) {
|
||||
path = resolved_path;
|
||||
path_length = strlen(path);
|
||||
} else {
|
||||
/* disable for now
|
||||
free(tmp);
|
||||
return 1; */
|
||||
}
|
||||
}
|
||||
free(tmp);
|
||||
}
|
||||
state->cwd_length = strlen(resolved_path);
|
||||
state->cwd = (char *) realloc(state->cwd, state->cwd_length+1);
|
||||
memcpy(state->cwd, resolved_path, state->cwd_length+1);
|
||||
#else
|
||||
goto no_realpath;
|
||||
#endif
|
||||
#if defined(TSRM_WIN32)
|
||||
{
|
||||
int new_path_length;
|
||||
|
||||
new_path_length = GetLongPathName(path, NULL, 0);
|
||||
if (new_path_length == 0) {
|
||||
goto php_failed_getlongpath;
|
||||
}
|
||||
|
||||
/* GetLongPathName already counts the \0 */
|
||||
new_path = (char *) malloc(new_path_length);
|
||||
if (!new_path) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (GetLongPathName(path, new_path, new_path_length) != 0) {
|
||||
path = new_path;
|
||||
path_length = new_path_length;
|
||||
} else {
|
||||
free(new_path);
|
||||
php_failed_getlongpath:
|
||||
new_path = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
free_path = path_copy = tsrm_strndup(path, path_length);
|
||||
|
||||
CWD_STATE_COPY(&old_state, state);
|
||||
#if VIRTUAL_CWD_DEBUG
|
||||
fprintf(stderr,"cwd = %s path = %s\n", state->cwd, path);
|
||||
#endif
|
||||
if (IS_ABSOLUTE_PATH(path_copy, path_length)) {
|
||||
copy_amount = COPY_WHEN_ABSOLUTE(path_copy);
|
||||
is_absolute = 1;
|
||||
} else {
|
||||
char *ptr, *path_copy, *free_path;
|
||||
char *tok = NULL;
|
||||
int ptr_length;
|
||||
#ifdef TSRM_WIN32
|
||||
} else if (IS_SLASH(path_copy[0])) {
|
||||
copy_amount = 2;
|
||||
int is_unc = 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (copy_amount != -1) {
|
||||
state->cwd = (char *) realloc(state->cwd, copy_amount + 1);
|
||||
if (copy_amount) {
|
||||
if (is_absolute) {
|
||||
memcpy(state->cwd, path_copy, copy_amount);
|
||||
path_copy += copy_amount;
|
||||
} else {
|
||||
memcpy(state->cwd, old_state.cwd, copy_amount);
|
||||
}
|
||||
no_realpath:
|
||||
|
||||
free_path = path_copy = tsrm_strndup(path, path_length);
|
||||
CWD_STATE_COPY(&old_state, state);
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
if (path_length >= 2 && path[1] == ':') {
|
||||
state->cwd = (char *) realloc(state->cwd, 2 + 1);
|
||||
state->cwd[0] = toupper(path[0]);
|
||||
state->cwd[1] = ':';
|
||||
state->cwd[2] = '\0';
|
||||
state->cwd_length = 2;
|
||||
path_copy += 2;
|
||||
} else if (IS_UNC_PATH(path, path_length)) {
|
||||
state->cwd = (char *) realloc(state->cwd, 1 + 1);
|
||||
state->cwd[0] = DEFAULT_SLASH;
|
||||
state->cwd[1] = '\0';
|
||||
state->cwd_length = 1;
|
||||
path_copy += 2;
|
||||
is_unc = 2;
|
||||
} else {
|
||||
#endif
|
||||
state->cwd = (char *) realloc(state->cwd, 1);
|
||||
state->cwd[0] = '\0';
|
||||
state->cwd_length = 0;
|
||||
#ifdef TSRM_WIN32
|
||||
}
|
||||
state->cwd[copy_amount] = '\0';
|
||||
state->cwd_length = copy_amount;
|
||||
}
|
||||
|
||||
|
||||
if (state->cwd_length > 0 || IS_ABSOLUTE_PATH(path, path_length)) {
|
||||
#endif
|
||||
|
||||
ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, &tok);
|
||||
while (ptr) {
|
||||
ptr_length = strlen(ptr);
|
||||
@@ -551,7 +612,8 @@ php_failed_getlongpath:
|
||||
state->cwd = (char *) realloc(state->cwd, state->cwd_length+ptr_length+1+1);
|
||||
#ifdef TSRM_WIN32
|
||||
/* Windows 9x will consider C:\\Foo as a network path. Avoid it. */
|
||||
if ((state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') ||
|
||||
if (state->cwd_length < 2 ||
|
||||
(state->cwd[state->cwd_length-1]!='\\' && state->cwd[state->cwd_length-1]!='/') ||
|
||||
IsDBCSLeadByte(state->cwd[state->cwd_length-2])) {
|
||||
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
|
||||
}
|
||||
@@ -575,32 +637,51 @@ php_failed_getlongpath:
|
||||
state->cwd[state->cwd_length++] = DEFAULT_SLASH;
|
||||
#endif
|
||||
memcpy(&state->cwd[state->cwd_length], ptr, ptr_length+1);
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
if (use_realpath != CWD_EXPAND) {
|
||||
WIN32_FIND_DATA data;
|
||||
HANDLE hFind;
|
||||
|
||||
if ((hFind = FindFirstFile(state->cwd, &data)) != INVALID_HANDLE_VALUE) {
|
||||
int length = strlen(data.cFileName);
|
||||
|
||||
if (length != ptr_length) {
|
||||
state->cwd = (char *) realloc(state->cwd, state->cwd_length+length+1);
|
||||
}
|
||||
memcpy(&state->cwd[state->cwd_length], data.cFileName, length+1);
|
||||
ptr_length = length;
|
||||
FindClose(hFind);
|
||||
} else if (use_realpath == CWD_REALPATH) {
|
||||
if (is_unc) {
|
||||
is_unc--;
|
||||
} else {
|
||||
free(free_path);
|
||||
CWD_STATE_FREE(state);
|
||||
*state = old_state;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
state->cwd_length += ptr_length;
|
||||
}
|
||||
ptr = tsrm_strtok_r(NULL, TOKENIZER_STRING, &tok);
|
||||
}
|
||||
|
||||
free(free_path);
|
||||
|
||||
if (state->cwd_length == COPY_WHEN_ABSOLUTE(state->cwd)) {
|
||||
state->cwd = (char *) realloc(state->cwd, state->cwd_length+1+1);
|
||||
state->cwd[state->cwd_length] = DEFAULT_SLASH;
|
||||
state->cwd[state->cwd_length+1] = '\0';
|
||||
state->cwd_length++;
|
||||
}
|
||||
} else {
|
||||
state->cwd = (char *) realloc(state->cwd, path_length+1);
|
||||
memcpy(state->cwd, path, path_length+1);
|
||||
state->cwd_length = path_length;
|
||||
}
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
if (new_path) {
|
||||
free(new_path);
|
||||
}
|
||||
#endif
|
||||
free(free_path);
|
||||
|
||||
if (use_realpath && CWDG(realpath_cache_size_limit)) {
|
||||
realpath_cache_add(orig_path, orig_path_len, state->cwd, state->cwd_length, t TSRMLS_CC);
|
||||
if (use_realpath != CWD_EXPAND && CWDG(realpath_cache_size_limit)) {
|
||||
realpath_cache_add(path, path_length, state->cwd, state->cwd_length, t TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (verify_path && verify_path(state)) {
|
||||
@@ -620,7 +701,7 @@ php_failed_getlongpath:
|
||||
|
||||
CWD_API int virtual_chdir(const char *path TSRMLS_DC)
|
||||
{
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, 1)?-1:0;
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, CWD_REALPATH)?-1:0;
|
||||
}
|
||||
|
||||
CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path TSRMLS_DC) TSRMLS_DC)
|
||||
@@ -662,7 +743,7 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC)
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, 1)==0) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)==0) {
|
||||
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
|
||||
|
||||
memcpy(real_path, new_state.cwd, len);
|
||||
@@ -683,7 +764,7 @@ CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_f
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, 1);
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, CWD_FILEPATH);
|
||||
|
||||
*filepath = new_state.cwd;
|
||||
|
||||
@@ -706,7 +787,10 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC)
|
||||
}
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, path, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
f = fopen(new_state.cwd, mode);
|
||||
|
||||
@@ -720,7 +804,10 @@ CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC)
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, pathname, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(TSRM_WIN32)
|
||||
ret = tsrm_win32_access(new_state.cwd, mode);
|
||||
@@ -741,7 +828,10 @@ CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC)
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, filename, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = utime(new_state.cwd, buf);
|
||||
|
||||
@@ -756,7 +846,10 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC)
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, filename, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = chmod(new_state.cwd, mode);
|
||||
|
||||
@@ -771,7 +864,10 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, filename, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (link) {
|
||||
#if HAVE_LCHOWN
|
||||
@@ -794,7 +890,10 @@ CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...)
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, path, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (flags & O_CREAT) {
|
||||
mode_t mode;
|
||||
@@ -818,7 +917,10 @@ CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC)
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, path, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
f = creat(new_state.cwd, mode);
|
||||
|
||||
@@ -833,11 +935,18 @@ CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&old_state, &CWDG(cwd));
|
||||
virtual_file_ex(&old_state, oldname, NULL, 0);
|
||||
if (virtual_file_ex(&old_state, oldname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
return -1;
|
||||
}
|
||||
oldname = old_state.cwd;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, newname, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, newname, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
newname = new_state.cwd;
|
||||
|
||||
retval = rename(oldname, newname);
|
||||
@@ -854,11 +963,12 @@ CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, 1)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = stat(new_state.cwd, buf);
|
||||
retval = php_sys_stat(new_state.cwd, buf);
|
||||
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return retval;
|
||||
@@ -871,7 +981,10 @@ CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, path, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = lstat(new_state.cwd, buf);
|
||||
|
||||
@@ -886,7 +999,10 @@ CWD_API int virtual_unlink(const char *path TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, path, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = unlink(new_state.cwd);
|
||||
|
||||
@@ -900,7 +1016,10 @@ CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, pathname, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
retval = mkdir(new_state.cwd);
|
||||
@@ -917,7 +1036,10 @@ CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC)
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, pathname, NULL, 0);
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
retval = rmdir(new_state.cwd);
|
||||
|
||||
@@ -935,7 +1057,10 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC)
|
||||
DIR *retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
virtual_file_ex(&new_state, pathname, NULL, 1);
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
retval = opendir(new_state.cwd);
|
||||
|
||||
@@ -1043,25 +1168,36 @@ CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC)
|
||||
|
||||
#endif
|
||||
|
||||
/* On AIX & Tru64 when a file does not exist realpath() returns
|
||||
* NULL, and sets errno to ENOENT. Unlike in other libc implementations
|
||||
* the destination is not filled and remains undefined. Therefor, we
|
||||
* must populate it manually using strcpy as done on systems with no
|
||||
* realpath() function.
|
||||
*/
|
||||
#if defined(__osf__) || defined(_AIX)
|
||||
char *php_realpath_hack(char *src, char *dest)
|
||||
CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC)
|
||||
{
|
||||
char *ret;
|
||||
cwd_state new_state;
|
||||
char cwd[MAXPATHLEN];
|
||||
|
||||
if ((ret = realpath(src, dest)) == NULL && errno == ENOENT) {
|
||||
return strcpy(dest, src);
|
||||
if (!IS_ABSOLUTE_PATH(path, strlen(path)) &&
|
||||
VCWD_GETCWD(cwd, MAXPATHLEN)) {
|
||||
new_state.cwd = strdup(cwd);
|
||||
new_state.cwd_length = strlen(cwd);
|
||||
} else {
|
||||
return ret;
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
free(new_state.cwd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (real_path) {
|
||||
int copy_len = new_state.cwd_length>MAXPATHLEN-1 ? MAXPATHLEN-1 : new_state.cwd_length;
|
||||
memcpy(real_path, new_state.cwd, copy_len);
|
||||
real_path[copy_len] = '\0';
|
||||
free(new_state.cwd);
|
||||
return real_path;
|
||||
} else {
|
||||
return new_state.cwd;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/*
|
||||
|
||||
+27
-15
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -37,8 +37,14 @@
|
||||
#include <stdarg.h>
|
||||
#endif
|
||||
|
||||
#ifdef ZTS
|
||||
#define VIRTUAL_DIR
|
||||
#endif
|
||||
|
||||
#ifndef TSRM_WIN32
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <direct.h>
|
||||
#endif
|
||||
|
||||
#if defined(__osf__) || defined(_AIX)
|
||||
@@ -120,6 +126,12 @@ typedef unsigned short mode_t;
|
||||
#define CWD_API
|
||||
#endif
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf);
|
||||
#else
|
||||
# define php_sys_stat stat
|
||||
#endif
|
||||
|
||||
typedef struct _cwd_state {
|
||||
char *cwd;
|
||||
int cwd_length;
|
||||
@@ -166,10 +178,6 @@ CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__osf__) || defined(_AIX)
|
||||
char *php_realpath_hack(char *src, char *dest);
|
||||
#endif
|
||||
|
||||
#if HAVE_UTIME
|
||||
CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC);
|
||||
#endif
|
||||
@@ -178,8 +186,17 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC);
|
||||
CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link TSRMLS_DC);
|
||||
#endif
|
||||
|
||||
/* One of the following constants must be used as the last argument
|
||||
in virtual_file_ex() call. */
|
||||
|
||||
#define CWD_EXPAND 0 /* expand "." and ".." but dont resolve symlinks */
|
||||
#define CWD_FILEPATH 1 /* resolve symlinks if file is exist otherwise expand */
|
||||
#define CWD_REALPATH 2 /* call realpath(), resolve symlinks. File must exist */
|
||||
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath);
|
||||
|
||||
CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC);
|
||||
|
||||
#define REALPATH_CACHE_TTL (2*60) /* 2 minutes */
|
||||
#define REALPATH_CACHE_SIZE 0 /* disabled while php.ini isn't loaded */
|
||||
|
||||
@@ -209,6 +226,9 @@ extern virtual_cwd_globals cwd_globals;
|
||||
# define CWDG(v) (cwd_globals.v)
|
||||
#endif
|
||||
|
||||
CWD_API void realpath_cache_clean(TSRMLS_D);
|
||||
CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC);
|
||||
|
||||
/* The actual macros to be used in programs using TSRM
|
||||
* If the program defines VIRTUAL_DIR it will use the
|
||||
* virtual_* functions
|
||||
@@ -259,7 +279,7 @@ extern virtual_cwd_globals cwd_globals;
|
||||
#define VCWD_CHDIR(path) chdir(path)
|
||||
#define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir)
|
||||
#define VCWD_GETWD(buf) getwd(buf)
|
||||
#define VCWD_STAT(path, buff) stat(path, buff)
|
||||
#define VCWD_STAT(path, buff) php_sys_stat(path, buff)
|
||||
#define VCWD_LSTAT(path, buff) lstat(path, buff)
|
||||
#define VCWD_UNLINK(path) unlink(path)
|
||||
#define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode)
|
||||
@@ -272,15 +292,7 @@ extern virtual_cwd_globals cwd_globals;
|
||||
#define VCWD_ACCESS(pathname, mode) access(pathname, mode)
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_REALPATH
|
||||
#if defined(__osf__) || defined(_AIX)
|
||||
#define VCWD_REALPATH(path, real_path) php_realpath_hack(path, real_path)
|
||||
#else
|
||||
#define VCWD_REALPATH(path, real_path) realpath(path, real_path)
|
||||
#endif
|
||||
#else
|
||||
#define VCWD_REALPATH(path, real_path) strcpy(real_path, path)
|
||||
#endif
|
||||
#define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path TSRMLS_CC)
|
||||
|
||||
#if HAVE_UTIME
|
||||
#define VCWD_UTIME(path, time) utime(path, time)
|
||||
|
||||
+11
-3
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -86,11 +86,19 @@ TSRM_API void tsrm_win32_shutdown(void)
|
||||
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode)
|
||||
{
|
||||
SHFILEINFO sfi;
|
||||
|
||||
if (mode == 1 /*X_OK*/) {
|
||||
#if 1
|
||||
/* This code is not supported by Windows 98,
|
||||
* but we don't support it anymore */
|
||||
DWORD type;
|
||||
|
||||
return GetBinaryType(pathname, &type)?0:-1;
|
||||
#else
|
||||
SHFILEINFO sfi;
|
||||
|
||||
return access(pathname, 0) == 0 &&
|
||||
SHGetFileInfo(pathname, 0, &sfi, sizeof(SHFILEINFO), SHGFI_EXETYPE) != 0 ? 0 : -1;
|
||||
#endif
|
||||
} else {
|
||||
return access(pathname, mode);
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2006 The PHP Group |
|
||||
| Copyright (c) 1997-2007 The PHP Group |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 3.01 of the PHP license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -35,7 +35,7 @@ UPGRADE NOTES - PHP 5.1
|
||||
1a. Overview
|
||||
============
|
||||
|
||||
>From the PHP script writer's point of view, the change most likely to impact
|
||||
From the PHP script writer's point of view, the change most likely to impact
|
||||
legacy code is in the way that references are handled in all PHP versions
|
||||
post-dating the PHP 4.4.0 release.
|
||||
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ libZend_la_SOURCES=\
|
||||
zend_variables.c zend.c zend_API.c zend_extensions.c zend_hash.c \
|
||||
zend_list.c zend_indent.c zend_builtin_functions.c zend_sprintf.c \
|
||||
zend_ini.c zend_qsort.c zend_objects.c zend_object_handlers.c \
|
||||
zend_objects_API.c zend_ts_hash.c zend_stream.c zend_mm.c \
|
||||
zend_objects_API.c zend_ts_hash.c zend_stream.c \
|
||||
zend_default_classes.c \
|
||||
zend_iterators.c zend_interfaces.c zend_exceptions.c \
|
||||
zend_strtod.c zend_multibyte.c
|
||||
|
||||
@@ -195,10 +195,6 @@ SOURCE=.\zend_llist.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_mm.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_object_handlers.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -371,10 +367,6 @@ SOURCE=.\zend_llist.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_mm.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_modules.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+7
-32
@@ -129,13 +129,6 @@ AC_ARG_WITH(zend-vm,
|
||||
PHP_ZEND_VM=CALL
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(malloc-mm,
|
||||
[ --enable-malloc-mm Use environment variable for run-time malloc/emalloc
|
||||
selection - FOR DEVELOPERS ONLY!!],
|
||||
[
|
||||
ZEND_USE_MALLOC_MM=$enableval
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(maintainer-zts,
|
||||
[ --enable-maintainer-zts Enable thread safety - for code maintainers only!!],[
|
||||
ZEND_MAINTAINER_ZTS=$enableval
|
||||
@@ -151,13 +144,6 @@ AC_ARG_ENABLE(inline-optimization,
|
||||
ZEND_INLINE_OPTIMIZATION=yes
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(memory-limit,
|
||||
[ --enable-memory-limit Compile with memory limit support], [
|
||||
ZEND_MEMORY_LIMIT=$enableval
|
||||
],[
|
||||
ZEND_MEMORY_LIMIT=no
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(zend-multibyte,
|
||||
[ --enable-zend-multibyte Compile with zend multibyte support], [
|
||||
ZEND_MULTIBYTE=$enableval
|
||||
@@ -168,18 +154,12 @@ AC_ARG_ENABLE(zend-multibyte,
|
||||
AC_MSG_CHECKING([virtual machine dispatch method])
|
||||
AC_MSG_RESULT($PHP_ZEND_VM)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable the Zend memory manager)
|
||||
AC_MSG_RESULT($ZEND_USE_ZEND_ALLOC)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable thread-safety)
|
||||
AC_MSG_RESULT($ZEND_MAINTAINER_ZTS)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable inline optimization for GCC)
|
||||
AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable a memory limit)
|
||||
AC_MSG_RESULT($ZEND_MEMORY_LIMIT)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Zend debugging)
|
||||
AC_MSG_RESULT($ZEND_DEBUG)
|
||||
|
||||
@@ -214,24 +194,12 @@ fi
|
||||
|
||||
test -n "$DEBUG_CFLAGS" && CFLAGS="$CFLAGS $DEBUG_CFLAGS"
|
||||
|
||||
if test "$ZEND_USE_ZEND_ALLOC" = "yes"; then
|
||||
AC_DEFINE(USE_ZEND_ALLOC,1,[Use Zend memory manager])
|
||||
else
|
||||
AC_DEFINE(USE_ZEND_ALLOC,0,[Use Zend memory manager])
|
||||
fi
|
||||
|
||||
if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
|
||||
AC_DEFINE(ZTS,1,[ ])
|
||||
CFLAGS="$CFLAGS -DZTS"
|
||||
LIBZEND_CPLUSPLUS_CHECKS
|
||||
fi
|
||||
|
||||
if test "$ZEND_MEMORY_LIMIT" = "yes"; then
|
||||
AC_DEFINE(MEMORY_LIMIT, 1, [Memory limit])
|
||||
else
|
||||
AC_DEFINE(MEMORY_LIMIT, 0, [Memory limit])
|
||||
fi
|
||||
|
||||
if test "$ZEND_MULTIBYTE" = "yes"; then
|
||||
AC_DEFINE(ZEND_MULTIBYTE, 1, [ ])
|
||||
fi
|
||||
@@ -413,3 +381,10 @@ AC_DEFUN([LIBZEND_CPLUSPLUS_CHECKS],[
|
||||
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING(whether /dev/urandom exists)
|
||||
if test -r "/dev/urandom" && test -c "/dev/urandom"; then
|
||||
AC_DEFINE([HAVE_DEV_URANDOM], 1, [Define if the target system has /dev/urandom device])
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
@@ -229,10 +229,6 @@ SOURCE=.\zend_llist.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_mm.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_object_handlers.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -409,10 +405,6 @@ SOURCE=.\zend_llist.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_mm.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_modules.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ dnl This file contains local autoconf functions.
|
||||
|
||||
AC_DEFUN([LIBZEND_BISON_CHECK],[
|
||||
# we only support certain bison versions
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2"
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3"
|
||||
|
||||
# for standalone build of Zend Engine
|
||||
test -z "$SED" && SED=sed
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?php
|
||||
date_default_timezone_set("UTC");
|
||||
|
||||
function simple() {
|
||||
$a = 0;
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
--TEST--
|
||||
builtin functions tests
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
var_dump(get_resource_type());
|
||||
var_dump(get_resource_type(""));
|
||||
$fp = fopen(__FILE__, "r");
|
||||
var_dump(get_resource_type($fp));
|
||||
fclose($fp);
|
||||
var_dump(get_resource_type($fp));
|
||||
|
||||
var_dump(get_loaded_extensions(true));
|
||||
var_dump(gettype(get_loaded_extensions()));
|
||||
var_dump(count(get_loaded_extensions()));
|
||||
|
||||
define("USER_CONSTANT", "test");
|
||||
|
||||
var_dump(get_defined_constants(true, true));
|
||||
var_dump(gettype(get_defined_constants(true)));
|
||||
var_dump(gettype(get_defined_constants()));
|
||||
var_dump(count(get_defined_constants()));
|
||||
|
||||
function test () {
|
||||
}
|
||||
|
||||
var_dump(get_defined_functions(true));
|
||||
var_dump(gettype(get_defined_functions()));
|
||||
var_dump(count(get_defined_functions()));
|
||||
|
||||
var_dump(get_declared_interfaces(true));
|
||||
var_dump(gettype(get_declared_interfaces()));
|
||||
var_dump(count(get_declared_interfaces()));
|
||||
|
||||
var_dump(get_extension_funcs());
|
||||
var_dump(get_extension_funcs(true));
|
||||
var_dump(gettype(get_extension_funcs("standard")));
|
||||
var_dump(count(get_extension_funcs("standard")));
|
||||
var_dump(gettype(get_extension_funcs("zend")));
|
||||
var_dump(count(get_extension_funcs("zend")));
|
||||
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: Wrong parameter count for get_resource_type() in %s on line %d
|
||||
NULL
|
||||
|
||||
Warning: Supplied argument is not a valid resource handle in %s on line %d
|
||||
bool(false)
|
||||
string(6) "stream"
|
||||
string(7) "Unknown"
|
||||
|
||||
Warning: Wrong parameter count for get_loaded_extensions() in %s on line %d
|
||||
NULL
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
|
||||
Warning: Wrong parameter count for get_defined_constants() in %s on line %d
|
||||
NULL
|
||||
string(5) "array"
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
|
||||
Warning: Wrong parameter count for get_defined_functions() in %s on line %d
|
||||
NULL
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
|
||||
Warning: Wrong parameter count for get_declared_interfaces() in %s on line %d
|
||||
NULL
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
|
||||
Warning: Wrong parameter count for get_extension_funcs() in %s on line %d
|
||||
NULL
|
||||
bool(false)
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
string(5) "array"
|
||||
int(%d)
|
||||
Done
|
||||
@@ -10,4 +10,5 @@ abstract class TestClass
|
||||
===DONE===
|
||||
--EXPECTF--
|
||||
|
||||
Fatal error: Static function TestClass::getName() cannot be abstract in %sabstract-static.php on line %d
|
||||
Strict Standards: Static function TestClass::getName() should not be abstract in %sabstract-static.php on line %d
|
||||
===DONE===
|
||||
@@ -23,6 +23,6 @@ $test = new Test();
|
||||
$test2 = $test->__copy();
|
||||
var_dump($test2);
|
||||
?>
|
||||
--EXPECT--
|
||||
object(Test)#2 (0) {
|
||||
--EXPECTF--
|
||||
object(Test)#%d (0) {
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Bug #33282 (Re-assignment by reference does not clear the is_ref flag)
|
||||
--FILE--
|
||||
<?php
|
||||
$a = array(1, 2, 3);
|
||||
$r = &$a[0];
|
||||
$r = &$a[1];
|
||||
$r = &$a[2];
|
||||
var_dump($a);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
&int(3)
|
||||
}
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #34065 (throw in foreach causes memory leaks)
|
||||
--FILE--
|
||||
<?php
|
||||
$data = file(__FILE__);
|
||||
try {
|
||||
foreach ($data as $line) {
|
||||
throw new Exception("error");
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo "ok\n";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #34617 (zend_deactivate: objects_store used after zend_objects_store_destroy is called)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("xml")) print "skip"; ?>
|
||||
<?php if (!extension_loaded("xml")) print "skip the xml extension not available"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
class Thing {}
|
||||
@@ -15,4 +15,4 @@ function boom()
|
||||
boom();
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
ok
|
||||
Executable
+14
@@ -0,0 +1,14 @@
|
||||
--TEST--
|
||||
Bug #35106 (nested foreach fails when array variable has a reference)
|
||||
--FILE--
|
||||
<?php
|
||||
$a=array("1","2");
|
||||
$b=&$a;
|
||||
foreach($a as $i){
|
||||
echo $i;
|
||||
foreach($a as $p);
|
||||
}
|
||||
echo "\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
12
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
--TEST--
|
||||
Bug #35634 (Erroneous "Class declarations may not be nested" error raised)
|
||||
--INI--
|
||||
error_reporting=0
|
||||
--FILE--
|
||||
<?php
|
||||
if (defined("pass3")) {
|
||||
|
||||
class ErrorClass {
|
||||
}
|
||||
|
||||
} else if (defined("pass2")) {
|
||||
|
||||
class TestClass {
|
||||
function __construct() {
|
||||
}
|
||||
function TestClass() {
|
||||
$this->__construct();
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
function errorHandler($errorNumber, $errorMessage, $fileName, $lineNumber) {
|
||||
define("pass3", 1);
|
||||
include(__FILE__);
|
||||
die("Error: $errorMessage ($fileName:$lineNumber)\n");
|
||||
}
|
||||
|
||||
set_error_handler('errorHandler');
|
||||
define("pass2", 1);
|
||||
include(__FILE__);
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Error: Redefining already defined constructor for class TestClass (%sbug35634.php:12)
|
||||
Executable
+54
@@ -0,0 +1,54 @@
|
||||
--TEST--
|
||||
Bug #36214 (__get method works properly only when conditional operator is used)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("spl")) die("skip SPL is no available"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
class context {
|
||||
public $stack = array();
|
||||
|
||||
public function __set($name,$var) {
|
||||
$this->stack[$name] = $var;return;
|
||||
}
|
||||
|
||||
public function &__get($name) {
|
||||
return $this->stack[$name];
|
||||
}
|
||||
}
|
||||
|
||||
$ctx = new context;
|
||||
$ctx->comment_preview = array();
|
||||
$ctx->comment_preview[0] = 1;
|
||||
$ctx->comment_preview[1] = 2;
|
||||
var_dump($ctx->comment_preview);
|
||||
|
||||
$comment_preview = array();
|
||||
$comment_preview[0] = 1;
|
||||
$comment_preview[1] = 2;
|
||||
$ctx->comment_preview = $comment_preview;
|
||||
var_dump($ctx->comment_preview);
|
||||
|
||||
$ctx->comment_preview = new ArrayObject();
|
||||
$ctx->comment_preview[0] = 1;
|
||||
$ctx->comment_preview[1] = 2;
|
||||
var_dump($ctx->comment_preview);
|
||||
?>
|
||||
--EXPECT--
|
||||
array(2) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
}
|
||||
array(2) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
}
|
||||
object(ArrayObject)#2 (2) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
}
|
||||
Executable
+50
@@ -0,0 +1,50 @@
|
||||
--TEST--
|
||||
Bug #38047 ("file" and "line" sometimes not set in backtrace from inside error handler)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(E_ALL);
|
||||
set_error_handler('kalus_error_handler');
|
||||
ini_set("display_errors", "on");
|
||||
|
||||
class A {
|
||||
function A_ftk($a) {
|
||||
}
|
||||
}
|
||||
|
||||
function kalus_error_handler($error_code, $error_string, $filename, $line, $symbols) {
|
||||
echo "$error_string\n";
|
||||
get_error_context();
|
||||
}
|
||||
|
||||
function get_error_context() {
|
||||
$backtrace = debug_backtrace();
|
||||
$n = 1;
|
||||
foreach ($backtrace as $call) {
|
||||
echo $n++." ";
|
||||
if (isset($call["file"])) {
|
||||
echo $call["file"];
|
||||
if (isset($call["line"])) {
|
||||
echo ":".$call["line"];
|
||||
}
|
||||
}
|
||||
if (isset($call["function"])) {
|
||||
echo " ".$call["function"]."()";
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
echo "\n";
|
||||
}
|
||||
|
||||
//This will not create file and line items for the call into the error handler
|
||||
$page["name"] = A::A_ftk();
|
||||
?>
|
||||
--EXPECTF--
|
||||
Non-static method A::A_ftk() should not be called statically
|
||||
1 %sbug38047.php:13 get_error_context()
|
||||
2 %sbug38047.php:36 kalus_error_handler()
|
||||
3 %sbug38047.php:36 A_ftk()
|
||||
|
||||
Missing argument 1 for A::A_ftk(), called in %sbug38047.php on line 36 and defined
|
||||
1 %sbug38047.php:13 get_error_context()
|
||||
2 %sbug38047.php:7 kalus_error_handler()
|
||||
3 %sbug38047.php:36 A_ftk()
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #38211 (variable name and cookie name match breaks script execution)
|
||||
--FILE--
|
||||
<?php
|
||||
$test = 'test';
|
||||
unset($$test);
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
--TEST--
|
||||
Bug #38220 Crash on some object operations
|
||||
--FILE--
|
||||
<?php
|
||||
class drv {
|
||||
public $obj;
|
||||
|
||||
function func1() {
|
||||
echo "func1(): {$this->obj->i}\n";
|
||||
}
|
||||
|
||||
function close() {
|
||||
echo "close(): {$this->obj->i}\n";
|
||||
}
|
||||
}
|
||||
|
||||
class A {
|
||||
public $i;
|
||||
|
||||
function __construct($i) {
|
||||
$this->i = $i;
|
||||
|
||||
}
|
||||
|
||||
function __call($method, $args) {
|
||||
$drv = myserv::drv();
|
||||
|
||||
$drv->obj = $this;
|
||||
|
||||
echo "before call $method\n";
|
||||
print_r($this);
|
||||
call_user_func_array(array($drv, $method), $args);
|
||||
echo "after call $method\n";
|
||||
|
||||
// Uncomment this line to work without crash
|
||||
// $drv->obj = null;
|
||||
}
|
||||
|
||||
function __destruct() {
|
||||
echo "A::__destruct()\n";
|
||||
$this->close();
|
||||
}
|
||||
}
|
||||
|
||||
class myserv {
|
||||
private static $drv = null;
|
||||
|
||||
static function drv() {
|
||||
if (is_null(self::$drv))
|
||||
self::$drv = new drv;
|
||||
return self::$drv;
|
||||
}
|
||||
}
|
||||
|
||||
$obj1 = new A(1);
|
||||
$obj1->func1();
|
||||
|
||||
$obj2 = new A(2);
|
||||
unset($obj1);
|
||||
$obj2->func1();
|
||||
?>
|
||||
--EXPECT--
|
||||
before call func1
|
||||
A Object
|
||||
(
|
||||
[i] => 1
|
||||
)
|
||||
func1(): 1
|
||||
after call func1
|
||||
A::__destruct()
|
||||
before call close
|
||||
A Object
|
||||
(
|
||||
[i] => 1
|
||||
)
|
||||
close(): 1
|
||||
after call close
|
||||
before call func1
|
||||
A Object
|
||||
(
|
||||
[i] => 2
|
||||
)
|
||||
func1(): 1
|
||||
after call func1
|
||||
A::__destruct()
|
||||
before call close
|
||||
A Object
|
||||
(
|
||||
[i] => 2
|
||||
)
|
||||
close(): 2
|
||||
after call close
|
||||
Executable
+18
@@ -0,0 +1,18 @@
|
||||
--TEST--
|
||||
Bug #38234 (Exception in __clone makes memory leak)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
function __clone() {
|
||||
throw new Exception();
|
||||
}
|
||||
}
|
||||
try {
|
||||
$x = new Foo();
|
||||
$y = clone $x;
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
--TEST--
|
||||
Bug #38287 (static variables mess up global vars)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(0);
|
||||
|
||||
something::do_something();
|
||||
|
||||
// $not_there is really NULL
|
||||
var_dump($not_there);
|
||||
|
||||
// error occurs here: execution should never get inside the if condition because $not_there is NULL
|
||||
if ($not_there["invalid_var"]) {
|
||||
// will print NULL (which is ok, but execution should never get here if the value is NULL)
|
||||
var_dump($not_there["use_authmodule"]);
|
||||
// will print "PATH:Array"
|
||||
print "PATH:".$not_there["use_authmodule"]."\n";
|
||||
}
|
||||
|
||||
class something {
|
||||
public static function get_object() {
|
||||
static $object=NULL;
|
||||
if ($object===NULL)
|
||||
$object=new something;
|
||||
return $object;
|
||||
}
|
||||
|
||||
public static function do_something() {
|
||||
self::get_object()->vars[]=1;
|
||||
self::get_object()->vars[]=2;
|
||||
self::get_object()->vars[]=3;
|
||||
var_dump(self::get_object()->vars);
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
array(3) {
|
||||
[0]=>
|
||||
int(1)
|
||||
[1]=>
|
||||
int(2)
|
||||
[2]=>
|
||||
int(3)
|
||||
}
|
||||
NULL
|
||||
@@ -0,0 +1,25 @@
|
||||
--TEST--
|
||||
Bug #38461 (setting private attribute with __set() produces segfault)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class Operation
|
||||
{
|
||||
function __set( $var, $value )
|
||||
{
|
||||
$this->$var = $value;
|
||||
}
|
||||
}
|
||||
|
||||
class ExtOperation extends Operation
|
||||
{
|
||||
private $x;
|
||||
}
|
||||
|
||||
$op = new ExtOperation;
|
||||
$op->x = 'test';
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
Done
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
--TEST--
|
||||
Bug #38623 (leaks in a tricky code with switch() and exceptions)
|
||||
--FILE--
|
||||
<?php
|
||||
try {
|
||||
switch(strtolower("apache")) {
|
||||
case "apache":
|
||||
throw new Exception("test");
|
||||
break;
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
echo "ok\n";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
@@ -0,0 +1,34 @@
|
||||
--TEST--
|
||||
Bug #38624 (Strange warning when incrementing an object property and exception is thrown from __get method)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class impl
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->counter++;
|
||||
}
|
||||
public function __set( $name, $value )
|
||||
{
|
||||
throw new Exception( "doesn't work" );
|
||||
}
|
||||
|
||||
public function __get( $name )
|
||||
{
|
||||
throw new Exception( "doesn't work" );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$impl = new impl();
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught exception 'Exception' with message 'doesn't work' in %s:%d
|
||||
Stack trace:
|
||||
#0 %s(%d): impl->__get('counter')
|
||||
#1 %s(%d): impl->__construct()
|
||||
#2 {main}
|
||||
thrown in %s on line %d
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
--TEST--
|
||||
Bug #38772 (inconsistent overriding of methods in different visibility contexts)
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
|
||||
public function __construct() {
|
||||
$this -> foo();
|
||||
}
|
||||
|
||||
private function foo() {
|
||||
echo __METHOD__ . "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
public function foo() {
|
||||
echo __METHOD__ . "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
class C extends A {
|
||||
protected function foo() {
|
||||
echo __METHOD__ . "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
class D extends A {
|
||||
private function foo() {
|
||||
echo __METHOD__ . "\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A();
|
||||
$b = new B();
|
||||
$c = new C();
|
||||
$d = new D();
|
||||
--EXPECT--
|
||||
A::foo
|
||||
A::foo
|
||||
A::foo
|
||||
A::foo
|
||||
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
Bug #38779 (engine crashes when require()'ing file with syntax error through userspace stream wrapper)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class Loader {
|
||||
private $position;
|
||||
private $data;
|
||||
public function stream_open($path, $mode, $options, &$opened_path) {
|
||||
$this->data = '<' . "?php \n\"\";ll l\n ?" . '>';
|
||||
$this->position = 0;
|
||||
return true;
|
||||
}
|
||||
function stream_read($count) {
|
||||
$ret = substr($this->data, $this->position, $count);
|
||||
$this->position += strlen($ret);
|
||||
return $ret;
|
||||
}
|
||||
function stream_eof() {
|
||||
return $this->position >= strlen($this->data);
|
||||
}
|
||||
}
|
||||
stream_wrapper_register('Loader', 'Loader');
|
||||
require 'Loader://qqq.php';
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Parse error: %s error%sin Loader://qqq.php on line %d
|
||||
@@ -0,0 +1,45 @@
|
||||
--TEST--
|
||||
Bug #38779 (engine crashes when require()'ing file with syntax error through userspace stream wrapper)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class Loader {
|
||||
private $position;
|
||||
private $data;
|
||||
public function stream_open($path, $mode, $options, &$opened_path) {
|
||||
$this->data = '<' . "?php \n\"\";ll l\n ?" . '>';
|
||||
$this->position = 0;
|
||||
return true;
|
||||
}
|
||||
function stream_read($count) {
|
||||
$ret = substr($this->data, $this->position, $count);
|
||||
$this->position += strlen($ret);
|
||||
return $ret;
|
||||
}
|
||||
function stream_eof() {
|
||||
return $this->position >= strlen($this->data);
|
||||
}
|
||||
function stream_flush() {
|
||||
@unlink(dirname(__FILE__)."/bug38779.txt");
|
||||
var_dump("flush!");
|
||||
}
|
||||
function stream_close() {
|
||||
var_dump("close!");
|
||||
}
|
||||
}
|
||||
stream_wrapper_register('Loader', 'Loader');
|
||||
$fp = fopen ('Loader://qqq.php', 'r');
|
||||
|
||||
$filename = dirname(__FILE__)."/bug38779.txt";
|
||||
$fp1 = fopen($filename, "w");
|
||||
fwrite($fp1, "<"."?php blah blah?".">");
|
||||
fclose($fp1);
|
||||
|
||||
include $filename;
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Parse error: %s error%sin %s on line %d
|
||||
string(6) "flush!"
|
||||
string(6) "close!"
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
--TEST--
|
||||
Bug #38808 ("maybe ref" issue for current() and others)
|
||||
--FILE--
|
||||
<?php
|
||||
$current = "current";
|
||||
$next = "next";
|
||||
|
||||
$b = array(1=>'one', 2=>'two');
|
||||
$a =& $b;
|
||||
|
||||
echo $current($a)."\n";
|
||||
$next($a);
|
||||
echo $current($a)."\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
one
|
||||
two
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
--TEST--
|
||||
Bug #38942 (Double old-style-ctor inheritance)
|
||||
--FILE--
|
||||
<?php
|
||||
class foo {
|
||||
public function foo() {}
|
||||
}
|
||||
|
||||
class bar extends foo {
|
||||
}
|
||||
print_r(get_class_methods("bar"));
|
||||
?>
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
[0] => foo
|
||||
)
|
||||
@@ -0,0 +1,24 @@
|
||||
--TEST--
|
||||
Bug #39003 (__autoload() is called for type hinting)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class ClassName
|
||||
{
|
||||
public $var = 'bla';
|
||||
}
|
||||
|
||||
function test (OtherClassName $object) { }
|
||||
|
||||
function __autoload($class)
|
||||
{
|
||||
var_dump("__autload($class)");
|
||||
}
|
||||
|
||||
$obj = new ClassName;
|
||||
test($obj);
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Catchable fatal error: Argument 1 passed to test() must be an instance of OtherClassName, instance of ClassName given, called in %s on line %d and defined in %s on line %d
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
--TEST--
|
||||
Bug #39017 (foreach(($obj = new myClass) as $v); echo $obj; segfaults)
|
||||
--FILE--
|
||||
<?php
|
||||
class A {}
|
||||
foreach(($a=(object)new A()) as $v);
|
||||
var_dump($a); // UNKNOWN:0
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(A)#%d (0) {
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
--TEST--
|
||||
Bug #39036 (Unsetting key of foreach() yields segmentation fault)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$key = 'asdf';
|
||||
|
||||
foreach (get_defined_vars() as $key => $value) {
|
||||
unset($$key);
|
||||
}
|
||||
|
||||
var_dump($key);
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Undefined variable: key in %s on line %d
|
||||
NULL
|
||||
Done
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
--TEST--
|
||||
Bug #39297 (Memory corryption because of indirect modification of overloaded array)
|
||||
--FILE--
|
||||
<?php
|
||||
function compareByRef(&$first, &$second) {
|
||||
return $first === $second;
|
||||
}
|
||||
|
||||
class MyTree implements ArrayAccess {
|
||||
public $parent;
|
||||
public $children = array();
|
||||
|
||||
public function offsetExists($offset) {
|
||||
}
|
||||
|
||||
public function offsetUnset($offset) {
|
||||
}
|
||||
|
||||
public function offsetSet($offset, $value) {
|
||||
echo "offsetSet()\n";
|
||||
$cannonicalName = strtolower($offset);
|
||||
$this->children[$cannonicalName] = $value;
|
||||
$value->parent = $this;
|
||||
}
|
||||
|
||||
public function offsetGet($offset) {
|
||||
echo "offsetGet()\n";
|
||||
$cannonicalName = strtolower($offset);
|
||||
return $this->children[$cannonicalName];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$id = 'Test';
|
||||
|
||||
$root = new MyTree();
|
||||
$child = new MyTree();
|
||||
$root[$id] = $child;
|
||||
|
||||
var_dump(compareByRef($root[$id], $child));
|
||||
?>
|
||||
--EXPECT--
|
||||
offsetSet()
|
||||
offsetGet()
|
||||
bool(true)
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
--TEST--
|
||||
Bug #39304 (Segmentation fault with list unpacking of string offset)
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
list($a, $b) = $s[0];
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Cannot use string offset as an array in %sbug39304.php on line 3
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
--TEST--
|
||||
Bug #39438 (Fatal error: Out of memory)
|
||||
--INI--
|
||||
memory_limit=16M
|
||||
--FILE--
|
||||
<?php
|
||||
$i=0;
|
||||
$test2=array(
|
||||
'a1_teasermenu' => array(
|
||||
'downloadcounter' => 2777,
|
||||
'versions' => array(
|
||||
'0.1.0' => array (
|
||||
'title' => 'A1 Teasermenu',
|
||||
'description' => 'Displays a teaser for advanced subpages or a selection of advanced pages',
|
||||
'state' => 'stable',
|
||||
'reviewstate' => 0,
|
||||
'category' => 'plugin',
|
||||
'downloadcounter' => 2787,
|
||||
'lastuploaddate' => 1088427240,
|
||||
'dependencies' => array (
|
||||
'depends' => array(
|
||||
'typo3' =>'',
|
||||
'php' =>'',
|
||||
'cms' => ''
|
||||
),
|
||||
'conflicts' => array('' =>'')
|
||||
),
|
||||
'authorname' => 'Mirko Balluff',
|
||||
'authoremail' => 'balluff@amt1.de',
|
||||
'ownerusername' => 'amt1',
|
||||
't3xfilemd5' => '3a4ec198b6ea8d0bc2d69d9b7400398f',
|
||||
)
|
||||
)
|
||||
)
|
||||
);
|
||||
$test=array();
|
||||
while($i<1200) {
|
||||
$test[]=$test2;
|
||||
$i++;
|
||||
}
|
||||
$out=serialize($test);
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
Executable
+16
@@ -0,0 +1,16 @@
|
||||
--TEST--
|
||||
Bug #39445 (Calling debug_backtrace() in the __toString() function produces a crash)
|
||||
--FILE--
|
||||
<?php
|
||||
class test {
|
||||
public function __toString() {
|
||||
debug_backtrace();
|
||||
return 'lowercase';
|
||||
}
|
||||
}
|
||||
|
||||
$test = new test();
|
||||
echo strtoupper($test);
|
||||
?>
|
||||
--EXPECT--
|
||||
LOWERCASE
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
--TEST--
|
||||
Bug #39449 (Overloaded array properties do not work correctly)
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
private $keys = array();
|
||||
public function & __get($val) {
|
||||
return $this->keys[$val];
|
||||
}
|
||||
public function __set($k, $v) {
|
||||
$this->keys[$k] = $v;
|
||||
}
|
||||
}
|
||||
|
||||
$a =new A();
|
||||
$a->arr = array('a','b','c');
|
||||
|
||||
$b = &$a->arr;
|
||||
$b[]= 'd';
|
||||
|
||||
foreach ($a->arr as $k => $v) {
|
||||
echo "$k => $v\n";
|
||||
}
|
||||
|
||||
$a->arr[]='d';
|
||||
|
||||
foreach ($a->arr as $k => $v) {
|
||||
echo "$k => $v\n";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
0 => a
|
||||
1 => b
|
||||
2 => c
|
||||
3 => d
|
||||
0 => a
|
||||
1 => b
|
||||
2 => c
|
||||
3 => d
|
||||
4 => d
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
--TEST--
|
||||
Bug #39602 (Invalid session.save_handler crashes PHP)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("session")) die("skip"); ?>
|
||||
--INI--
|
||||
session.save_handler=qwerty
|
||||
--FILE--
|
||||
<?php
|
||||
ini_set("session.save_handler","files");
|
||||
$x = new stdClass();
|
||||
echo "ok";
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
Fatal error: Unknown: Cannot find save handler qwerty in Unknown on line 0
|
||||
Executable
+30
@@ -0,0 +1,30 @@
|
||||
--TEST--
|
||||
Bug #39721 (Runtime inheritance causes data corruption)
|
||||
--FILE--
|
||||
<?php
|
||||
class test2 {
|
||||
private static $instances = 0;
|
||||
public $instance;
|
||||
|
||||
public function __construct() {
|
||||
$this->instance = ++self::$instances;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$foo = new test2();
|
||||
|
||||
if (is_object($foo)) {
|
||||
class test2_child extends test2 {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
$child = new test2_child();
|
||||
|
||||
echo $foo->instance . "\n";
|
||||
echo $child->instance . "\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
1
|
||||
2
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
Bug #39775 ("Indirect modification ..." message is not shown)
|
||||
--FILE--
|
||||
<?php
|
||||
class test {
|
||||
var $array = array();
|
||||
function __get($var) {
|
||||
$v =& $this->array;
|
||||
return $this->array;
|
||||
}
|
||||
}
|
||||
$t = new test;
|
||||
$t->anything[] = 'bar';
|
||||
print_r($t->anything);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Indirect modification of overloaded property test::$anything has no effect in %sbug39775.php on line 10
|
||||
Array
|
||||
(
|
||||
)
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
--TEST--
|
||||
Bug #39825 (foreach produces memory error)
|
||||
--FILE--
|
||||
<?php
|
||||
$array = array(1 => 2, "foo" => "bar");
|
||||
$obj = (object)$array;
|
||||
foreach ($obj as $name => $value) {
|
||||
echo "$name -> $value\n";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
1 -> 2
|
||||
foo -> bar
|
||||
Executable
+88
@@ -0,0 +1,88 @@
|
||||
--TEST--
|
||||
Bug #39944 (References broken)
|
||||
--FILE--
|
||||
<?php
|
||||
$intTheValue = 0;
|
||||
|
||||
function &getValue() {
|
||||
global $intTheValue;
|
||||
return $intTheValue;
|
||||
}
|
||||
|
||||
function setValue(&$int, $iNewValue) {
|
||||
$int = $iNewValue;
|
||||
}
|
||||
|
||||
setValue(getValue(), 10);
|
||||
echo "intTheValue = {$intTheValue}\n";
|
||||
|
||||
$b = &$intTheValue;
|
||||
|
||||
setValue(getValue(), 10);
|
||||
echo "intTheValue = {$intTheValue}\n";
|
||||
|
||||
/****/
|
||||
|
||||
$arrTheArray = array();
|
||||
|
||||
function &getArray() {
|
||||
global $arrTheArray;
|
||||
return $arrTheArray;
|
||||
}
|
||||
|
||||
function addToArray(&$arr, $strToAdd) {
|
||||
$arr[] = $strToAdd;
|
||||
}
|
||||
|
||||
addToArray(getArray(), "xx1");
|
||||
$a = getArray();
|
||||
addToArray($a, "xx2");
|
||||
$b = &$arrTheArray;
|
||||
addToArray($b, "xx3");
|
||||
addToArray(getArray(), "xx4");
|
||||
$a = getArray();
|
||||
addToArray($a, "xx5");
|
||||
echo "arrTheArray = " . print_r($arrTheArray, 1);
|
||||
|
||||
/****/
|
||||
|
||||
class RefTest {
|
||||
protected $arr;
|
||||
|
||||
function Add($strToAdd) {
|
||||
$this->addToArray($this->getArray(), $strToAdd);
|
||||
}
|
||||
|
||||
function &getArray() {
|
||||
if (!$this->arr)
|
||||
$this->arr = array();
|
||||
return $this->arr;
|
||||
}
|
||||
|
||||
private function addToArray(&$arr, $strToAdd) {
|
||||
$arr[] = $strToAdd;
|
||||
}
|
||||
}
|
||||
|
||||
$objRefTest = new RefTest();
|
||||
$objRefTest->Add("xx1");
|
||||
$objRefTest->Add("xx2");
|
||||
$objRefTest->Add("xx3");
|
||||
|
||||
echo "objRefTest->getArray() = " . print_r($objRefTest->getArray(), 1);
|
||||
?>
|
||||
--EXPECT--
|
||||
intTheValue = 10
|
||||
intTheValue = 10
|
||||
arrTheArray = Array
|
||||
(
|
||||
[0] => xx1
|
||||
[1] => xx3
|
||||
[2] => xx4
|
||||
)
|
||||
objRefTest->getArray() = Array
|
||||
(
|
||||
[0] => xx1
|
||||
[1] => xx2
|
||||
[2] => xx3
|
||||
)
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
--TEST--
|
||||
Bug #39990 (Cannot "foreach" over overloaded properties)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
public function __get($name) {
|
||||
return array('Hello', 'World');
|
||||
}
|
||||
}
|
||||
|
||||
$obj=new Foo();
|
||||
foreach($obj->arr as $value)
|
||||
echo "$value\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
Hello
|
||||
World
|
||||
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
testing integer overflow (32bit)
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$doubles = array(
|
||||
2147483648,
|
||||
2147483649,
|
||||
2147483658,
|
||||
2147483748,
|
||||
2147484648,
|
||||
);
|
||||
|
||||
foreach ($doubles as $d) {
|
||||
$l = (int)$d;
|
||||
var_dump($l);
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(-2147483648)
|
||||
int(-2147483647)
|
||||
int(-2147483638)
|
||||
int(-2147483548)
|
||||
int(-2147482648)
|
||||
Done
|
||||
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
testing integer overflow (64bit)
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$doubles = array(
|
||||
9223372036854775808,
|
||||
9223372036854775809,
|
||||
9223372036854775818,
|
||||
9223372036854775908,
|
||||
9223372036854776808,
|
||||
);
|
||||
|
||||
foreach ($doubles as $d) {
|
||||
$l = (int)$d;
|
||||
var_dump($l);
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
Done
|
||||
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
testing integer underflow (32bit)
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$doubles = array(
|
||||
-2147483648,
|
||||
-2147483649,
|
||||
-2147483658,
|
||||
-2147483748,
|
||||
-2147484648,
|
||||
);
|
||||
|
||||
foreach ($doubles as $d) {
|
||||
$l = (int)$d;
|
||||
var_dump($l);
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(-2147483648)
|
||||
int(-2147483648)
|
||||
int(-2147483648)
|
||||
int(-2147483648)
|
||||
int(-2147483648)
|
||||
Done
|
||||
@@ -0,0 +1,29 @@
|
||||
--TEST--
|
||||
testing integer underflow (64bit)
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$doubles = array(
|
||||
-9223372036854775808,
|
||||
-9223372036854775809,
|
||||
-9223372036854775818,
|
||||
-9223372036854775908,
|
||||
-9223372036854776808,
|
||||
);
|
||||
|
||||
foreach ($doubles as $d) {
|
||||
$l = (int)$d;
|
||||
var_dump($l);
|
||||
}
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
int(-9223372036854775808)
|
||||
Done
|
||||
@@ -11,6 +11,5 @@ echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
ok
|
||||
|
||||
Notice: Undefined variable: b in %sunset_cv08.php on line %d
|
||||
ok
|
||||
ok
|
||||
+56
-21
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -101,7 +101,7 @@ ZEND_API zval zval_used_for_init; /* True global variable */
|
||||
/* version information */
|
||||
static char *zend_version_info;
|
||||
static uint zend_version_info_length;
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2006 Zend Technologies\n"
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2007 Zend Technologies\n"
|
||||
|
||||
|
||||
#define PRINT_ZVAL_INDENT 4
|
||||
@@ -131,9 +131,9 @@ static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent,
|
||||
if (is_object) {
|
||||
char *prop_name, *class_name;
|
||||
|
||||
zend_unmangle_property_name(string_key, str_len-1, &class_name, &prop_name);
|
||||
int mangled = zend_unmangle_property_name(string_key, str_len-1, &class_name, &prop_name);
|
||||
ZEND_PUTS_EX(prop_name);
|
||||
if (class_name) {
|
||||
if (class_name && mangled == SUCCESS) {
|
||||
if (class_name[0]=='*') {
|
||||
ZEND_PUTS_EX(":protected");
|
||||
} else {
|
||||
@@ -153,7 +153,7 @@ static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent,
|
||||
break;
|
||||
}
|
||||
ZEND_PUTS_EX("] => ");
|
||||
zend_print_zval_r_ex(zend_write, *tmp, indent+PRINT_ZVAL_INDENT TSRMLS_CC);
|
||||
zend_print_zval_r_ex(write_func, *tmp, indent+PRINT_ZVAL_INDENT TSRMLS_CC);
|
||||
ZEND_PUTS_EX("\n");
|
||||
zend_hash_move_forward_ex(ht, &iterator);
|
||||
}
|
||||
@@ -214,7 +214,7 @@ ZEND_API void zend_make_printable_zval(zval *expr, zval *expr_copy, int *use_cop
|
||||
}
|
||||
break;
|
||||
case IS_RESOURCE:
|
||||
expr_copy->value.str.val = (char *) emalloc(sizeof("Resource id #")-1 + MAX_LENGTH_OF_LONG);
|
||||
expr_copy->value.str.val = (char *) emalloc(sizeof("Resource id #") + MAX_LENGTH_OF_LONG);
|
||||
expr_copy->value.str.len = sprintf(expr_copy->value.str.val, "Resource id #%ld", expr->value.lval);
|
||||
break;
|
||||
case IS_ARRAY:
|
||||
@@ -426,13 +426,25 @@ static void register_standard_class(TSRMLS_D)
|
||||
zend_hash_add(CG(class_table), "stdclass", sizeof("stdclass"), &zend_standard_class_def, sizeof(zend_class_entry *), NULL);
|
||||
}
|
||||
|
||||
#ifdef ZTS
|
||||
static zend_bool asp_tags_default = 0;
|
||||
static zend_bool short_tags_default = 1;
|
||||
static zend_bool ct_pass_ref_default = 1;
|
||||
static zend_bool extended_info_default = 0;
|
||||
#else
|
||||
# define asp_tags_default 0
|
||||
# define short_tags_default 1
|
||||
# define ct_pass_ref_default 1
|
||||
# define extended_info_default 0
|
||||
#endif
|
||||
|
||||
static void zend_set_default_compile_time_values(TSRMLS_D)
|
||||
{
|
||||
/* default compile-time values */
|
||||
CG(asp_tags) = 0;
|
||||
CG(short_tags) = 1;
|
||||
CG(allow_call_time_pass_reference) = 1;
|
||||
CG(extended_info) = 0;
|
||||
CG(asp_tags) = asp_tags_default;
|
||||
CG(short_tags) = short_tags_default;
|
||||
CG(allow_call_time_pass_reference) = ct_pass_ref_default;
|
||||
CG(extended_info) = extended_info_default;
|
||||
}
|
||||
|
||||
|
||||
@@ -503,6 +515,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS
|
||||
EG(current_execute_data) = NULL;
|
||||
EG(current_module) = NULL;
|
||||
EG(exit_status) = 0;
|
||||
EG(active) = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -521,8 +534,9 @@ static void executor_globals_dtor(zend_executor_globals *executor_globals TSRMLS
|
||||
|
||||
static void zend_new_thread_end_handler(THREAD_T thread_id TSRMLS_DC)
|
||||
{
|
||||
zend_copy_ini_directives(TSRMLS_C);
|
||||
zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC);
|
||||
if (zend_copy_ini_directives(TSRMLS_C) == SUCCESS) {
|
||||
zend_ini_refresh_caches(ZEND_INI_STAGE_STARTUP TSRMLS_CC);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -569,6 +583,7 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions, i
|
||||
fpsetmask(0);
|
||||
#endif
|
||||
|
||||
zend_startup_strtod();
|
||||
zend_startup_extensions_mechanism();
|
||||
|
||||
/* Set up utility functions and values */
|
||||
@@ -692,6 +707,12 @@ void zend_post_startup(TSRMLS_D)
|
||||
*GLOBAL_FUNCTION_TABLE = *compiler_globals->function_table;
|
||||
*GLOBAL_CLASS_TABLE = *compiler_globals->class_table;
|
||||
*GLOBAL_CONSTANTS_TABLE = *executor_globals->zend_constants;
|
||||
|
||||
asp_tags_default = CG(asp_tags);
|
||||
short_tags_default = CG(short_tags);
|
||||
ct_pass_ref_default = CG(allow_call_time_pass_reference);
|
||||
extended_info_default = CG(extended_info);
|
||||
|
||||
zend_destroy_rsrc_list(&EG(persistent_list) TSRMLS_CC);
|
||||
free(compiler_globals->function_table);
|
||||
free(compiler_globals->class_table);
|
||||
@@ -699,7 +720,7 @@ void zend_post_startup(TSRMLS_D)
|
||||
free(EG(zend_constants));
|
||||
executor_globals_ctor(executor_globals, tsrm_ls);
|
||||
global_persistent_list = &EG(persistent_list);
|
||||
zend_new_thread_end_handler(tsrm_thread_id() TSRMLS_CC);
|
||||
zend_copy_ini_directives(TSRMLS_C);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -727,6 +748,7 @@ void zend_shutdown(TSRMLS_D)
|
||||
zend_hash_destroy(GLOBAL_CONSTANTS_TABLE);
|
||||
free(GLOBAL_CONSTANTS_TABLE);
|
||||
|
||||
zend_shutdown_strtod();
|
||||
#ifdef ZTS
|
||||
GLOBAL_FUNCTION_TABLE = NULL;
|
||||
GLOBAL_CLASS_TABLE = NULL;
|
||||
@@ -896,6 +918,8 @@ ZEND_API void zend_error(int type, const char *format, ...)
|
||||
char *error_filename;
|
||||
uint error_lineno;
|
||||
zval *orig_user_error_handler;
|
||||
zend_bool in_compilation;
|
||||
zend_class_entry *saved_class_entry;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
/* Obtain relevant filename and lineno */
|
||||
@@ -1003,7 +1027,18 @@ ZEND_API void zend_error(int type, const char *format, ...)
|
||||
|
||||
orig_user_error_handler = EG(user_error_handler);
|
||||
EG(user_error_handler) = NULL;
|
||||
|
||||
|
||||
/* User error handler may include() additinal PHP files.
|
||||
* If an error was generated during comilation PHP will compile
|
||||
* such scripts recursivly, but some CG() variables may be
|
||||
* inconsistent. */
|
||||
|
||||
in_compilation = zend_is_compiling(TSRMLS_C);
|
||||
if (in_compilation) {
|
||||
saved_class_entry = CG(active_class_entry);
|
||||
CG(active_class_entry) = NULL;
|
||||
}
|
||||
|
||||
if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) {
|
||||
if (retval) {
|
||||
if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) {
|
||||
@@ -1016,6 +1051,10 @@ ZEND_API void zend_error(int type, const char *format, ...)
|
||||
zend_error_cb(type, error_filename, error_lineno, format, args);
|
||||
}
|
||||
|
||||
if (in_compilation) {
|
||||
CG(active_class_entry) = saved_class_entry;
|
||||
}
|
||||
|
||||
if (!EG(user_error_handler)) {
|
||||
EG(user_error_handler) = orig_user_error_handler;
|
||||
}
|
||||
@@ -1076,6 +1115,7 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
|
||||
int i;
|
||||
zend_file_handle *file_handle;
|
||||
zend_op_array *orig_op_array = EG(active_op_array);
|
||||
zval **orig_retval_ptr_ptr = EG(return_value_ptr_ptr);
|
||||
zval *local_retval=NULL;
|
||||
|
||||
va_start(files, file_count);
|
||||
@@ -1094,13 +1134,6 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
|
||||
EG(return_value_ptr_ptr) = retval ? retval : &local_retval;
|
||||
zend_execute(EG(active_op_array) TSRMLS_CC);
|
||||
if (EG(exception)) {
|
||||
char ex_class_name[128];
|
||||
if (Z_TYPE_P(EG(exception)) == IS_OBJECT) {
|
||||
strncpy(ex_class_name, Z_OBJ_CLASS_NAME_P(EG(exception)), 127);
|
||||
ex_class_name[127] = '\0';
|
||||
} else {
|
||||
strcpy(ex_class_name, "Unknown Exception");
|
||||
}
|
||||
if (EG(user_exception_handler)) {
|
||||
zval *orig_user_exception_handler;
|
||||
zval ***params, *retval2, *old_exception;
|
||||
@@ -1138,11 +1171,13 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
|
||||
} else if (type==ZEND_REQUIRE) {
|
||||
va_end(files);
|
||||
EG(active_op_array) = orig_op_array;
|
||||
EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
va_end(files);
|
||||
EG(active_op_array) = orig_op_array;
|
||||
EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
+12
-7
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -448,17 +448,17 @@ END_EXTERN_C()
|
||||
|
||||
#define zend_try \
|
||||
{ \
|
||||
jmp_buf *orig_bailout = EG(bailout); \
|
||||
jmp_buf bailout; \
|
||||
jmp_buf *__orig_bailout = EG(bailout); \
|
||||
jmp_buf __bailout; \
|
||||
\
|
||||
EG(bailout) = &bailout; \
|
||||
if (setjmp(bailout)==0) {
|
||||
EG(bailout) = &__bailout; \
|
||||
if (setjmp(__bailout)==0) {
|
||||
#define zend_catch \
|
||||
} else { \
|
||||
EG(bailout) = orig_bailout;
|
||||
EG(bailout) = __orig_bailout;
|
||||
#define zend_end_try() \
|
||||
} \
|
||||
EG(bailout) = orig_bailout; \
|
||||
EG(bailout) = __orig_bailout; \
|
||||
}
|
||||
#define zend_first_try EG(bailout)=NULL; zend_try
|
||||
|
||||
@@ -640,6 +640,11 @@ END_EXTERN_C()
|
||||
varptr->refcount++; \
|
||||
}
|
||||
|
||||
#define READY_TO_DESTROY(zv) \
|
||||
((zv)->refcount == 1 && \
|
||||
(Z_TYPE_P(zv) != IS_OBJECT || \
|
||||
zend_objects_store_get_refcount(zv TSRMLS_CC) == 1))
|
||||
|
||||
|
||||
#define ZEND_MAX_RESERVED_RESOURCES 4
|
||||
|
||||
|
||||
+10
-11
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -882,7 +882,7 @@ ZEND_API void zend_update_class_constants(zend_class_entry *class_type TSRMLS_DC
|
||||
#else
|
||||
ALLOC_HASHTABLE(class_type->static_members);
|
||||
#endif
|
||||
zend_hash_init(CE_STATIC_MEMBERS(class_type), 0, NULL, ZVAL_PTR_DTOR, 0);
|
||||
zend_hash_init(CE_STATIC_MEMBERS(class_type), zend_hash_num_elements(&class_type->default_static_members), NULL, ZVAL_PTR_DTOR, 0);
|
||||
|
||||
zend_hash_internal_pointer_reset_ex(&class_type->default_static_members, &pos);
|
||||
while (zend_hash_get_current_data_ex(&class_type->default_static_members, (void**)&p, &pos) == SUCCESS) {
|
||||
@@ -943,7 +943,7 @@ ZEND_API int _object_and_properties_init(zval *arg, zend_class_entry *class_type
|
||||
object->properties = properties;
|
||||
} else {
|
||||
ALLOC_HASHTABLE_REL(object->properties);
|
||||
zend_hash_init(object->properties, 0, NULL, ZVAL_PTR_DTOR, 0);
|
||||
zend_hash_init(object->properties, zend_hash_num_elements(&class_type->default_properties), NULL, ZVAL_PTR_DTOR, 0);
|
||||
zend_hash_copy(object->properties, &class_type->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
|
||||
}
|
||||
} else {
|
||||
@@ -1588,7 +1588,7 @@ ZEND_API void zend_check_magic_method_implementation(zend_class_entry *ce, zend_
|
||||
lcname[sizeof(lcname)-1] = '\0'; /* zend_str_tolower_copy won't necessarily set the zero byte */
|
||||
|
||||
if (name_len == sizeof(ZEND_DESTRUCTOR_FUNC_NAME) - 1 && !memcmp(lcname, ZEND_DESTRUCTOR_FUNC_NAME, sizeof(ZEND_DESTRUCTOR_FUNC_NAME)) && fptr->common.num_args != 0) {
|
||||
zend_error(error_type, "Destuctor %s::%s() cannot take arguments", ce->name, ZEND_DESTRUCTOR_FUNC_NAME);
|
||||
zend_error(error_type, "Destructor %s::%s() cannot take arguments", ce->name, ZEND_DESTRUCTOR_FUNC_NAME);
|
||||
} else if (name_len == sizeof(ZEND_CLONE_FUNC_NAME) - 1 && !memcmp(lcname, ZEND_CLONE_FUNC_NAME, sizeof(ZEND_CLONE_FUNC_NAME)) && fptr->common.num_args != 0) {
|
||||
zend_error(error_type, "Method %s::%s() cannot accept any arguments", ce->name, ZEND_CLONE_FUNC_NAME);
|
||||
} else if (name_len == sizeof(ZEND_GET_FUNC_NAME) - 1 && !memcmp(lcname, ZEND_GET_FUNC_NAME, sizeof(ZEND_GET_FUNC_NAME)) && fptr->common.num_args != 1) {
|
||||
@@ -2095,18 +2095,17 @@ static zend_function_entry disabled_class_new[] = {
|
||||
|
||||
ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_DC)
|
||||
{
|
||||
zend_class_entry *disabled_class;
|
||||
disabled_class = (zend_class_entry *) emalloc(sizeof(zend_class_entry));
|
||||
zend_class_entry disabled_class;
|
||||
|
||||
zend_str_tolower(class_name, class_name_length);
|
||||
if (zend_hash_del(CG(class_table), class_name, class_name_length+1)==FAILURE) {
|
||||
return FAILURE;
|
||||
}
|
||||
INIT_CLASS_ENTRY((*disabled_class), class_name, disabled_class_new);
|
||||
disabled_class->create_object = display_disabled_class;
|
||||
disabled_class->name_length = class_name_length;
|
||||
zend_register_internal_class(disabled_class TSRMLS_CC);
|
||||
return 1;
|
||||
INIT_CLASS_ENTRY(disabled_class, class_name, disabled_class_new);
|
||||
disabled_class.create_object = display_disabled_class;
|
||||
disabled_class.name_length = class_name_length;
|
||||
zend_register_internal_class(&disabled_class TSRMLS_CC);
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static int zend_is_callable_check_func(int check_flags, zval ***zobj_ptr_ptr, zend_class_entry *ce_org, zval *callable, zend_class_entry **ce_ptr, zend_function **fptr_ptr TSRMLS_DC)
|
||||
|
||||
+4
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -48,6 +48,9 @@ typedef struct _zend_function_entry {
|
||||
|
||||
#define ZEND_FENTRY(zend_name, name, arg_info, flags) { #zend_name, name, arg_info, (zend_uint) (sizeof(arg_info)/sizeof(struct _zend_arg_info)-1), flags },
|
||||
|
||||
#define ZEND_RAW_FENTRY(zend_name, name, arg_info, flags) { zend_name, name, arg_info, (zend_uint) (sizeof(arg_info)/sizeof(struct _zend_arg_info)-1), flags },
|
||||
#define ZEND_RAW_NAMED_FE(zend_name, name, arg_info) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0)
|
||||
|
||||
#define ZEND_NAMED_FE(zend_name, name, arg_info) ZEND_FENTRY(zend_name, name, arg_info, 0)
|
||||
#define ZEND_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, 0)
|
||||
#define ZEND_DEP_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, ZEND_ACC_DEPRECATED)
|
||||
|
||||
+526
-251
File diff suppressed because it is too large.
Load diff
+5
-5
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -95,6 +95,7 @@ ZEND_API int zend_set_memory_limit(unsigned int memory_limit);
|
||||
|
||||
ZEND_API void start_memory_manager(TSRMLS_D);
|
||||
ZEND_API void shutdown_memory_manager(int silent, int full_shutdown TSRMLS_DC);
|
||||
ZEND_API int is_zend_mm(TSRMLS_D);
|
||||
|
||||
#if ZEND_DEBUG
|
||||
ZEND_API int _mem_block_check(void *ptr, int silent ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC);
|
||||
@@ -107,10 +108,8 @@ void zend_debug_alloc_output(char *format, ...);
|
||||
#define full_mem_check(silent)
|
||||
#endif
|
||||
|
||||
#if MEMORY_LIMIT
|
||||
ZEND_API size_t zend_memory_usage(TSRMLS_D);
|
||||
ZEND_API size_t zend_memory_peak_usage(TSRMLS_D);
|
||||
#endif
|
||||
ZEND_API size_t zend_memory_usage(int real_usage TSRMLS_DC);
|
||||
ZEND_API size_t zend_memory_peak_usage(int real_usage TSRMLS_DC);
|
||||
|
||||
END_EXTERN_C()
|
||||
|
||||
@@ -193,6 +192,7 @@ typedef struct _zend_mm_mem_handlers {
|
||||
|
||||
struct _zend_mm_storage {
|
||||
const zend_mm_mem_handlers *handlers;
|
||||
void *data;
|
||||
};
|
||||
|
||||
ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers, size_t block_size, void *params);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -201,7 +201,7 @@ ZEND_FUNCTION(func_get_arg)
|
||||
RETURN_FALSE;
|
||||
}
|
||||
convert_to_long_ex(z_requested_offset);
|
||||
requested_offset = (*z_requested_offset)->value.lval;
|
||||
requested_offset = Z_LVAL_PP(z_requested_offset);
|
||||
|
||||
if (requested_offset < 0) {
|
||||
zend_error(E_WARNING, "func_get_arg(): The argument number should be >= 0");
|
||||
@@ -281,7 +281,7 @@ ZEND_NAMED_FUNCTION(zend_if_strlen)
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
convert_to_string_ex(str);
|
||||
RETVAL_LONG((*str)->value.str.len);
|
||||
RETVAL_LONG(Z_STRLEN_PP(str));
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -517,8 +517,8 @@ repeat:
|
||||
zval_ptr_dtor(&val_free);
|
||||
}
|
||||
c.flags = case_sensitive; /* non persistent */
|
||||
c.name = zend_strndup((*var)->value.str.val, (*var)->value.str.len);
|
||||
c.name_len = (*var)->value.str.len+1;
|
||||
c.name = zend_strndup(Z_STRVAL_PP(var), Z_STRLEN_PP(var));
|
||||
c.name_len = Z_STRLEN_PP(var)+1;
|
||||
c.module_number = PHP_USER_CONSTANT;
|
||||
if (zend_register_constant(&c TSRMLS_CC) == SUCCESS) {
|
||||
RETURN_TRUE;
|
||||
@@ -541,7 +541,7 @@ ZEND_FUNCTION(defined)
|
||||
}
|
||||
|
||||
convert_to_string_ex(var);
|
||||
if (zend_get_constant((*var)->value.str.val, (*var)->value.str.len, &c TSRMLS_CC)) {
|
||||
if (zend_get_constant(Z_STRVAL_PP(var), Z_STRLEN_PP(var), &c TSRMLS_CC)) {
|
||||
zval_dtor(&c);
|
||||
RETURN_TRUE;
|
||||
} else {
|
||||
@@ -874,9 +874,21 @@ ZEND_FUNCTION(get_class_methods)
|
||||
instanceof_function(EG(scope), mptr->common.scope TSRMLS_CC))
|
||||
|| ((mptr->common.fn_flags & ZEND_ACC_PRIVATE) &&
|
||||
EG(scope) == mptr->common.scope)))) {
|
||||
MAKE_STD_ZVAL(method_name);
|
||||
ZVAL_STRING(method_name, mptr->common.function_name, 1);
|
||||
zend_hash_next_index_insert(return_value->value.ht, &method_name, sizeof(zval *), NULL);
|
||||
char *key;
|
||||
uint key_len;
|
||||
ulong num_index;
|
||||
uint len = strlen(mptr->common.function_name);
|
||||
|
||||
/* Do not display old-style inherited constructors */
|
||||
if ((mptr->common.fn_flags & ZEND_ACC_CTOR) == 0 ||
|
||||
mptr->common.scope == ce ||
|
||||
zend_hash_get_current_key_ex(&ce->function_table, &key, &key_len, &num_index, 0, &pos) != HASH_KEY_IS_STRING ||
|
||||
zend_binary_strcasecmp(key, key_len-1, mptr->common.function_name, len) == 0) {
|
||||
|
||||
MAKE_STD_ZVAL(method_name);
|
||||
ZVAL_STRINGL(method_name, mptr->common.function_name, len, 1);
|
||||
zend_hash_next_index_insert(return_value->value.ht, &method_name, sizeof(zval *), NULL);
|
||||
}
|
||||
}
|
||||
zend_hash_move_forward_ex(&ce->function_table, &pos);
|
||||
}
|
||||
@@ -1073,9 +1085,9 @@ ZEND_FUNCTION(function_exists)
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
convert_to_string_ex(function_name);
|
||||
lcname = zend_str_tolower_dup((*function_name)->value.str.val, (*function_name)->value.str.len);
|
||||
lcname = zend_str_tolower_dup(Z_STRVAL_PP(function_name), Z_STRLEN_PP(function_name));
|
||||
|
||||
retval = (zend_hash_find(EG(function_table), lcname, (*function_name)->value.str.len+1, (void **)&func) == SUCCESS);
|
||||
retval = (zend_hash_find(EG(function_table), lcname, Z_STRLEN_PP(function_name)+1, (void **)&func) == SUCCESS);
|
||||
|
||||
efree(lcname);
|
||||
|
||||
@@ -1103,7 +1115,7 @@ ZEND_FUNCTION(leak)
|
||||
if (ZEND_NUM_ARGS()>=1) {
|
||||
if (zend_get_parameters_ex(1, &leak)==SUCCESS) {
|
||||
convert_to_long_ex(leak);
|
||||
leakbytes = (*leak)->value.lval;
|
||||
leakbytes = Z_LVAL_PP(leak);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1160,7 +1172,7 @@ ZEND_FUNCTION(trigger_error)
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
convert_to_long_ex(z_error_type);
|
||||
error_type = (*z_error_type)->value.lval;
|
||||
error_type = Z_LVAL_PP(z_error_type);
|
||||
switch (error_type) {
|
||||
case E_USER_ERROR:
|
||||
case E_USER_WARNING:
|
||||
@@ -1176,7 +1188,7 @@ ZEND_FUNCTION(trigger_error)
|
||||
ZEND_WRONG_PARAM_COUNT();
|
||||
}
|
||||
convert_to_string_ex(z_error_message);
|
||||
zend_error(error_type, "%s", (*z_error_message)->value.str.val);
|
||||
zend_error(error_type, "%s", Z_STRVAL_PP(z_error_message));
|
||||
RETURN_TRUE;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -1404,11 +1416,16 @@ ZEND_FUNCTION(get_defined_functions)
|
||||
zend_hash_apply_with_arguments(EG(function_table), (apply_func_args_t) copy_function_name, 2, internal, user);
|
||||
|
||||
if (zend_hash_add(Z_ARRVAL_P(return_value), "internal", sizeof("internal"), (void **)&internal, sizeof(zval *), NULL) == FAILURE) {
|
||||
zval_ptr_dtor(&internal);
|
||||
zval_ptr_dtor(&user);
|
||||
zval_dtor(return_value);
|
||||
zend_error(E_WARNING, "Cannot add internal functions to return value from get_defined_functions()");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (zend_hash_add(Z_ARRVAL_P(return_value), "user", sizeof("user"), (void **)&user, sizeof(zval *), NULL) == FAILURE) {
|
||||
zval_ptr_dtor(&user);
|
||||
zval_dtor(return_value);
|
||||
zend_error(E_WARNING, "Cannot add user functions to return value from get_defined_functions()");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
@@ -1565,7 +1582,7 @@ ZEND_FUNCTION(get_loaded_extensions)
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto array get_defined_constants(void)
|
||||
/* {{{ proto array get_defined_constants([mixed categorize])
|
||||
Return an array containing the names and values of all defined constants */
|
||||
ZEND_FUNCTION(get_defined_constants)
|
||||
{
|
||||
@@ -1649,7 +1666,9 @@ static zval *debug_backtrace_get_args(void ***curpos TSRMLS_DC)
|
||||
while (--arg_count >= 0) {
|
||||
arg = (zval **) p++;
|
||||
if (*arg) {
|
||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
|
||||
if (Z_TYPE_PP(arg) != IS_OBJECT) {
|
||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(arg);
|
||||
}
|
||||
(*arg)->refcount++;
|
||||
add_next_index_zval(arg_array, *arg);
|
||||
} else {
|
||||
@@ -1843,7 +1862,23 @@ ZEND_FUNCTION(debug_print_backtrace)
|
||||
if (filename) {
|
||||
zend_printf(") called at [%s:%d]\n", filename, lineno);
|
||||
} else {
|
||||
ZEND_PUTS(")\n");
|
||||
zend_execute_data *prev = skip->prev_execute_data;
|
||||
|
||||
while (prev) {
|
||||
if (prev->function_state.function &&
|
||||
prev->function_state.function->common.type != ZEND_USER_FUNCTION) {
|
||||
prev = NULL;
|
||||
break;
|
||||
}
|
||||
if (prev->op_array) {
|
||||
zend_printf(") called at [%s:%d]\n", prev->op_array->filename, prev->opline->lineno);
|
||||
break;
|
||||
}
|
||||
prev = prev->prev_execute_data;
|
||||
}
|
||||
if (!prev) {
|
||||
ZEND_PUTS(")\n");
|
||||
}
|
||||
}
|
||||
include_filename = filename;
|
||||
ptr = skip->prev_execute_data;
|
||||
@@ -1896,7 +1931,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
}
|
||||
|
||||
/* skip debug_backtrace() */
|
||||
if (skip_last--) {
|
||||
if (skip_last-- && ptr) {
|
||||
int arg_count = *((ulong*)(cur_arg_pos - 2));
|
||||
cur_arg_pos -= (arg_count + 2);
|
||||
frames_on_stack--;
|
||||
@@ -1924,7 +1959,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL &&
|
||||
skip->prev_execute_data->opline->opcode != ZEND_DO_FCALL_BY_NAME &&
|
||||
skip->prev_execute_data->opline->opcode != ZEND_INCLUDE_OR_EVAL) {
|
||||
skip = skip->prev_execute_data;
|
||||
skip = skip->prev_execute_data;
|
||||
}
|
||||
|
||||
if (skip->op_array) {
|
||||
@@ -1937,6 +1972,20 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
* and debug_baktrace() might have been called by the error_handler. in this case we don't
|
||||
* want to pop anything of the argument-stack */
|
||||
} else {
|
||||
zend_execute_data *prev = skip->prev_execute_data;
|
||||
|
||||
while (prev) {
|
||||
if (prev->function_state.function &&
|
||||
prev->function_state.function->common.type != ZEND_USER_FUNCTION) {
|
||||
break;
|
||||
}
|
||||
if (prev->op_array) {
|
||||
add_assoc_string_ex(stack_frame, "file", sizeof("file"), prev->op_array->filename, 1);
|
||||
add_assoc_long_ex(stack_frame, "line", sizeof("line"), prev->opline->lineno);
|
||||
break;
|
||||
}
|
||||
prev = prev->prev_execute_data;
|
||||
}
|
||||
filename = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+94
-47
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -649,6 +649,7 @@ static inline void do_begin_loop(TSRMLS_D)
|
||||
parent = CG(active_op_array)->current_brk_cont;
|
||||
CG(active_op_array)->current_brk_cont = CG(active_op_array)->last_brk_cont;
|
||||
brk_cont_element = get_next_brk_cont_element(CG(active_op_array));
|
||||
brk_cont_element->start = get_next_op_number(CG(active_op_array));
|
||||
brk_cont_element->parent = parent;
|
||||
}
|
||||
|
||||
@@ -1079,7 +1080,7 @@ void zend_do_begin_function_declaration(znode *function_token, znode *function_n
|
||||
fn_flags = 0;
|
||||
}
|
||||
if ((fn_flags & ZEND_ACC_STATIC) && (fn_flags & ZEND_ACC_ABSTRACT) && !(CG(active_class_entry)->ce_flags & ZEND_ACC_INTERFACE)) {
|
||||
zend_error(E_COMPILE_ERROR, "Static function %s%s%s() cannot be abstract", is_method ? CG(active_class_entry)->name : "", is_method ? "::" : "", Z_STRVAL(function_name->u.constant));
|
||||
zend_error(E_STRICT, "Static function %s%s%s() should not be abstract", is_method ? CG(active_class_entry)->name : "", is_method ? "::" : "", Z_STRVAL(function_name->u.constant));
|
||||
}
|
||||
|
||||
function_token->u.op_array = CG(active_op_array);
|
||||
@@ -1534,11 +1535,10 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC)
|
||||
if (original_op==ZEND_SEND_REF
|
||||
&& !CG(allow_call_time_pass_reference)) {
|
||||
zend_error(E_COMPILE_WARNING,
|
||||
"Call-time pass-by-reference has been deprecated - argument passed by value; "
|
||||
"Call-time pass-by-reference has been deprecated; "
|
||||
"If you would like to pass it by reference, modify the declaration of %s(). "
|
||||
"If you would like to enable call-time pass-by-reference, you can set "
|
||||
"allow_call_time_pass_reference to true in your INI file. "
|
||||
"However, future versions may not support this any longer. ",
|
||||
"allow_call_time_pass_reference to true in your INI file. ",
|
||||
(function_ptr?function_ptr->common.function_name:"[runtime function name]"));
|
||||
}
|
||||
|
||||
@@ -1685,19 +1685,15 @@ void zend_do_return(znode *expr, int do_end_vparse TSRMLS_DC)
|
||||
|
||||
if (expr) {
|
||||
opline->op1 = *expr;
|
||||
|
||||
if (do_end_vparse && zend_is_function_or_method_call(expr)) {
|
||||
opline->extended_value = ZEND_RETURNS_FUNCTION;
|
||||
}
|
||||
} else {
|
||||
opline->op1.op_type = IS_CONST;
|
||||
INIT_ZVAL(opline->op1.u.constant);
|
||||
}
|
||||
|
||||
if (do_end_vparse) {
|
||||
if (zend_is_function_or_method_call(expr)) {
|
||||
opline->extended_value = ZEND_RETURNS_FUNCTION;
|
||||
} else {
|
||||
opline->extended_value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
SET_UNUSED(opline->op2);
|
||||
}
|
||||
|
||||
@@ -1725,16 +1721,35 @@ void zend_do_first_catch(znode *open_parentheses TSRMLS_DC)
|
||||
|
||||
void zend_initialize_try_catch_element(znode *try_token TSRMLS_DC)
|
||||
{
|
||||
int jmp_op_number = get_next_op_number(CG(active_op_array));
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
zend_llist jmp_list;
|
||||
zend_llist *jmp_list_ptr;
|
||||
|
||||
opline->opcode = ZEND_JMP;
|
||||
SET_UNUSED(opline->op1);
|
||||
SET_UNUSED(opline->op2);
|
||||
/* save for backpatching */
|
||||
|
||||
zend_llist_init(&jmp_list, sizeof(int), NULL, 0);
|
||||
zend_stack_push(&CG(bp_stack), (void *) &jmp_list, sizeof(zend_llist));
|
||||
zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr);
|
||||
zend_llist_add_element(jmp_list_ptr, &jmp_op_number);
|
||||
|
||||
zend_add_catch_element(try_token->u.opline_num, get_next_op_number(CG(active_op_array)) TSRMLS_CC);
|
||||
}
|
||||
|
||||
|
||||
void zend_do_mark_last_catch(znode *first_catch, znode *last_additional_catch TSRMLS_DC)
|
||||
{
|
||||
CG(active_op_array)->last--;
|
||||
zend_do_if_end(TSRMLS_C);
|
||||
if (last_additional_catch->u.opline_num == -1) {
|
||||
CG(active_op_array)->opcodes[first_catch->u.opline_num].op1.u.EA.type = 1;
|
||||
CG(active_op_array)->opcodes[first_catch->u.opline_num].extended_value = get_next_op_number(CG(active_op_array));
|
||||
} else {
|
||||
CG(active_op_array)->opcodes[last_additional_catch->u.opline_num].op1.u.EA.type = 1;
|
||||
CG(active_op_array)->opcodes[last_additional_catch->u.opline_num].extended_value = get_next_op_number(CG(active_op_array));
|
||||
}
|
||||
DEC_BPC(CG(active_op_array));
|
||||
}
|
||||
@@ -1771,6 +1786,18 @@ void zend_do_begin_catch(znode *try_token, znode *catch_class, znode *catch_var,
|
||||
|
||||
void zend_do_end_catch(znode *try_token TSRMLS_DC)
|
||||
{
|
||||
int jmp_op_number = get_next_op_number(CG(active_op_array));
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
zend_llist *jmp_list_ptr;
|
||||
|
||||
opline->opcode = ZEND_JMP;
|
||||
SET_UNUSED(opline->op1);
|
||||
SET_UNUSED(opline->op2);
|
||||
/* save for backpatching */
|
||||
|
||||
zend_stack_top(&CG(bp_stack), (void **) &jmp_list_ptr);
|
||||
zend_llist_add_element(jmp_list_ptr, &jmp_op_number);
|
||||
|
||||
CG(active_op_array)->opcodes[try_token->u.opline_num].extended_value = get_next_op_number(CG(active_op_array));
|
||||
}
|
||||
|
||||
@@ -1795,7 +1822,7 @@ ZEND_API void function_add_ref(zend_function *function)
|
||||
zval *tmp_zval;
|
||||
|
||||
ALLOC_HASHTABLE(op_array->static_variables);
|
||||
zend_hash_init(op_array->static_variables, 2, NULL, ZVAL_PTR_DTOR, 0);
|
||||
zend_hash_init(op_array->static_variables, zend_hash_num_elements(static_variables), NULL, ZVAL_PTR_DTOR, 0);
|
||||
zend_hash_copy(op_array->static_variables, static_variables, (copy_ctor_func_t) zval_add_ref, (void *) &tmp_zval, sizeof(zval *));
|
||||
}
|
||||
}
|
||||
@@ -2025,7 +2052,9 @@ static zend_bool do_inherit_method_check(HashTable *child_function_table, zend_f
|
||||
}
|
||||
}
|
||||
|
||||
if (parent_flags & ZEND_ACC_ABSTRACT) {
|
||||
if (parent_flags & ZEND_ACC_PRIVATE) {
|
||||
child->common.prototype = NULL;
|
||||
} else if (parent_flags & ZEND_ACC_ABSTRACT) {
|
||||
child->common.fn_flags |= ZEND_ACC_IMPLEMENTED_ABSTRACT;
|
||||
child->common.prototype = parent;
|
||||
} else if (!(parent->common.fn_flags & ZEND_ACC_CTOR) || (parent->common.prototype && (parent->common.prototype->common.scope->ce_flags & ZEND_ACC_INTERFACE))) {
|
||||
@@ -2186,13 +2215,18 @@ ZEND_API void zend_do_inherit_interfaces(zend_class_entry *ce, zend_class_entry
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void inherit_static_prop(zval **p)
|
||||
static int inherit_static_prop(zval **p, int num_args, va_list args, zend_hash_key *key)
|
||||
{
|
||||
(*p)->refcount++;
|
||||
(*p)->is_ref = 1;
|
||||
}
|
||||
HashTable *target = va_arg(args, HashTable*);
|
||||
|
||||
if (!zend_hash_quick_exists(target, key->arKey, key->nKeyLength, key->h)) {
|
||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
|
||||
if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, p, sizeof(zval*), NULL) == SUCCESS) {
|
||||
(*p)->refcount++;
|
||||
}
|
||||
}
|
||||
return ZEND_HASH_APPLY_KEEP;
|
||||
}
|
||||
|
||||
ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce TSRMLS_DC)
|
||||
{
|
||||
@@ -2213,9 +2247,9 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
|
||||
if (parent_ce->type != ce->type) {
|
||||
/* User class extends internal class */
|
||||
zend_update_class_constants(parent_ce TSRMLS_CC);
|
||||
zend_hash_merge(&ce->default_static_members, CE_STATIC_MEMBERS(parent_ce), (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0);
|
||||
zend_hash_apply_with_arguments(CE_STATIC_MEMBERS(parent_ce), (apply_func_args_t)inherit_static_prop, 1, &ce->default_static_members);
|
||||
} else {
|
||||
zend_hash_merge(&ce->default_static_members, &parent_ce->default_static_members, (void (*)(void *)) inherit_static_prop, NULL, sizeof(zval *), 0);
|
||||
zend_hash_apply_with_arguments(&parent_ce->default_static_members, (apply_func_args_t)inherit_static_prop, 1, &ce->default_static_members TSRMLS_CC);
|
||||
}
|
||||
zend_hash_merge_ex(&ce->properties_info, &parent_ce->properties_info, (copy_ctor_func_t) (ce->type & ZEND_INTERNAL_CLASS ? zend_duplicate_property_info_internal : zend_duplicate_property_info), sizeof(zend_property_info), (merge_checker_func_t) do_inherit_property_access_check, ce);
|
||||
|
||||
@@ -2732,19 +2766,22 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
|
||||
{
|
||||
zend_op *opline;
|
||||
int doing_inheritance = 0;
|
||||
zend_class_entry *new_class_entry = emalloc(sizeof(zend_class_entry));
|
||||
char *lcname = zend_str_tolower_dup(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
|
||||
zend_class_entry *new_class_entry;
|
||||
char *lcname;
|
||||
|
||||
if (CG(active_class_entry)) {
|
||||
zend_error(E_COMPILE_ERROR, "Class declarations may not be nested");
|
||||
return;
|
||||
}
|
||||
|
||||
lcname = zend_str_tolower_dup(class_name->u.constant.value.str.val, class_name->u.constant.value.str.len);
|
||||
|
||||
if (!(strcmp(lcname, "self") && strcmp(lcname, "parent"))) {
|
||||
efree(lcname);
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use '%s' as class name as it is reserved", class_name->u.constant.value.str.val);
|
||||
}
|
||||
|
||||
new_class_entry = emalloc(sizeof(zend_class_entry));
|
||||
new_class_entry->type = ZEND_USER_CLASS;
|
||||
new_class_entry->name = class_name->u.constant.value.str.val;
|
||||
new_class_entry->name_length = class_name->u.constant.value.str.len;
|
||||
@@ -2918,7 +2955,7 @@ ZEND_API int zend_unmangle_property_name(char *mangled_property, int len, char *
|
||||
*prop_name = mangled_property;
|
||||
return SUCCESS;
|
||||
}
|
||||
if (len < 3) {
|
||||
if (len < 3 || mangled_property[1]==0) {
|
||||
zend_error(E_NOTICE, "Illegal member variable name");
|
||||
*prop_name = mangled_property;
|
||||
return FAILURE;
|
||||
@@ -3619,6 +3656,10 @@ void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type
|
||||
}
|
||||
}
|
||||
|
||||
if (expr->op_type == IS_CONST) {
|
||||
zend_error(E_COMPILE_ERROR, "instanceof expects an object instance, constant given");
|
||||
}
|
||||
|
||||
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
opline->opcode = ZEND_INSTANCEOF;
|
||||
opline->result.op_type = IS_TMP_VAR;
|
||||
@@ -3631,11 +3672,12 @@ void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type
|
||||
}
|
||||
|
||||
|
||||
void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, int variable TSRMLS_DC)
|
||||
void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, znode *as_token, int variable TSRMLS_DC)
|
||||
{
|
||||
zend_op *opline;
|
||||
zend_bool is_variable;
|
||||
zend_bool push_container = 0;
|
||||
zend_op dummy_opline;
|
||||
|
||||
if (variable) {
|
||||
if (zend_is_function_or_method_call(array)) {
|
||||
@@ -3643,6 +3685,8 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno
|
||||
} else {
|
||||
is_variable = 1;
|
||||
}
|
||||
/* save the location of FETCH_W instruction(s) */
|
||||
open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array));
|
||||
zend_do_end_variable_parse(BP_VAR_W, 0 TSRMLS_CC);
|
||||
if (CG(active_op_array)->last > 0 &&
|
||||
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) {
|
||||
@@ -3654,6 +3698,7 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno
|
||||
}
|
||||
} else {
|
||||
is_variable = 0;
|
||||
open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array));
|
||||
}
|
||||
|
||||
/* save the location of FE_RESET */
|
||||
@@ -3668,28 +3713,17 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno
|
||||
opline->op1 = *array;
|
||||
SET_UNUSED(opline->op2);
|
||||
opline->extended_value = is_variable ? ZEND_FE_RESET_VARIABLE : 0;
|
||||
*open_brackets_token = opline->result;
|
||||
|
||||
{
|
||||
zend_op dummy_opline;
|
||||
dummy_opline.result = opline->result;
|
||||
if (push_container) {
|
||||
dummy_opline.op1 = CG(active_op_array)->opcodes[CG(active_op_array)->last-2].op1;
|
||||
} else {
|
||||
znode tmp;
|
||||
|
||||
dummy_opline.result = opline->result;
|
||||
if (push_container) {
|
||||
dummy_opline.op1 = CG(active_op_array)->opcodes[CG(active_op_array)->last-2].op1;
|
||||
} else {
|
||||
znode tmp;
|
||||
|
||||
tmp.op_type = IS_UNUSED;
|
||||
dummy_opline.op1 = tmp;
|
||||
}
|
||||
zend_stack_push(&CG(foreach_copy_stack), (void *) &dummy_opline, sizeof(zend_op));
|
||||
tmp.op_type = IS_UNUSED;
|
||||
dummy_opline.op1 = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, znode *as_token TSRMLS_DC)
|
||||
{
|
||||
zend_op *opline;
|
||||
zend_stack_push(&CG(foreach_copy_stack), (void *) &dummy_opline, sizeof(zend_op));
|
||||
|
||||
/* save the location of FE_FETCH */
|
||||
as_token->u.opline_num = get_next_op_number(CG(active_op_array));
|
||||
@@ -3698,7 +3732,7 @@ void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, zno
|
||||
opline->opcode = ZEND_FE_FETCH;
|
||||
opline->result.op_type = IS_VAR;
|
||||
opline->result.u.var = get_temporary_variable(CG(active_op_array));
|
||||
opline->op1 = *open_brackets_token;
|
||||
opline->op1 = dummy_opline.result;
|
||||
opline->extended_value = 0;
|
||||
SET_UNUSED(opline->op2);
|
||||
|
||||
@@ -3710,7 +3744,7 @@ void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, zno
|
||||
}
|
||||
|
||||
|
||||
void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, znode *key TSRMLS_DC)
|
||||
void zend_do_foreach_cont(znode *foreach_token, znode *open_brackets_token, znode *as_token, znode *value, znode *key TSRMLS_DC)
|
||||
{
|
||||
zend_op *opline;
|
||||
znode dummy, value_node;
|
||||
@@ -3741,6 +3775,19 @@ void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, z
|
||||
/* Mark extended_value for assign-by-reference */
|
||||
opline->extended_value |= ZEND_FE_FETCH_BYREF;
|
||||
CG(active_op_array)->opcodes[foreach_token->u.opline_num].extended_value |= ZEND_FE_RESET_REFERENCE;
|
||||
} else {
|
||||
zend_op *foreach_copy;
|
||||
zend_op *fetch = &CG(active_op_array)->opcodes[foreach_token->u.opline_num];
|
||||
zend_op *end = &CG(active_op_array)->opcodes[open_brackets_token->u.opline_num];
|
||||
|
||||
/* Change "write context" into "read context" */
|
||||
fetch->extended_value = 0; /* reset ZEND_FE_RESET_VARIABLE */
|
||||
while (fetch != end) {
|
||||
(--fetch)->opcode -= 3; /* FETCH_W -> FETCH_R */
|
||||
}
|
||||
/* prevent double SWITCH_FREE */
|
||||
zend_stack_top(&CG(foreach_copy_stack), (void **) &foreach_copy);
|
||||
foreach_copy->op1.op_type = IS_UNUSED;
|
||||
}
|
||||
|
||||
value_node = opline->result;
|
||||
|
||||
+19
-37
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -89,6 +89,7 @@ struct _zend_op {
|
||||
|
||||
|
||||
typedef struct _zend_brk_cont_element {
|
||||
int start;
|
||||
int cont;
|
||||
int brk;
|
||||
int parent;
|
||||
@@ -475,9 +476,8 @@ void zend_do_isset_or_isempty(int type, znode *result, znode *variable TSRMLS_DC
|
||||
|
||||
void zend_do_instanceof(znode *result, znode *expr, znode *class_znode, int type TSRMLS_DC);
|
||||
|
||||
void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, int variable TSRMLS_DC);
|
||||
void zend_do_foreach_fetch(znode *foreach_token, znode *open_brackets_token, znode *as_token TSRMLS_DC);
|
||||
void zend_do_foreach_cont(znode *foreach_token, znode *as_token, znode *value, znode *key TSRMLS_DC);
|
||||
void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, znode *array, znode *as_token, int variable TSRMLS_DC);
|
||||
void zend_do_foreach_cont(znode *foreach_token, znode *open_brackets_token, znode *as_token, znode *value, znode *key TSRMLS_DC);
|
||||
void zend_do_foreach_end(znode *foreach_token, znode *as_token TSRMLS_DC);
|
||||
|
||||
void zend_do_declare_begin(TSRMLS_D);
|
||||
@@ -662,40 +662,22 @@ int zendlex(znode *zendlval TSRMLS_DC);
|
||||
#define ZEND_SEND_BY_REF 1
|
||||
#define ZEND_SEND_PREFER_REF 2
|
||||
|
||||
/* Lost In Stupid Parentheses */
|
||||
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
|
||||
( \
|
||||
zf \
|
||||
&& ((zend_function *) zf)->common.arg_info \
|
||||
&& \
|
||||
( \
|
||||
( \
|
||||
arg_num<=((zend_function *) zf)->common.num_args \
|
||||
&& ((zend_function *) zf)->common.arg_info[arg_num-1].pass_by_reference == ZEND_SEND_BY_REF \
|
||||
) \
|
||||
|| ( \
|
||||
arg_num>((zend_function *) zf)->common.num_args \
|
||||
&& ((zend_function *) zf)->common.pass_rest_by_reference == ZEND_SEND_BY_REF \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
#define ARG_SEND_TYPE(zf, arg_num) \
|
||||
((zf) ? \
|
||||
((((zend_function*)(zf))->common.arg_info && \
|
||||
arg_num<=((zend_function*)(zf))->common.num_args) ? \
|
||||
((zend_function *)(zf))->common.arg_info[arg_num-1].pass_by_reference : \
|
||||
((zend_function *)(zf))->common.pass_rest_by_reference) : \
|
||||
ZEND_SEND_BY_VAL)
|
||||
|
||||
#define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
|
||||
( \
|
||||
zf \
|
||||
&& ((zend_function *) zf)->common.arg_info \
|
||||
&& \
|
||||
( \
|
||||
( \
|
||||
arg_num<=((zend_function *) zf)->common.num_args \
|
||||
&& ((zend_function *) zf)->common.arg_info[arg_num-1].pass_by_reference == ZEND_SEND_PREFER_REF \
|
||||
) \
|
||||
|| ( \
|
||||
arg_num>((zend_function *) zf)->common.num_args \
|
||||
&& ((zend_function *) zf)->common.pass_rest_by_reference == ZEND_SEND_PREFER_REF \
|
||||
) \
|
||||
) \
|
||||
)
|
||||
#define ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \
|
||||
(ARG_SEND_TYPE(zf, arg_num) == ZEND_SEND_BY_REF)
|
||||
|
||||
#define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \
|
||||
(ARG_SEND_TYPE(zf, arg_num) & (ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF))
|
||||
|
||||
#define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \
|
||||
(ARG_SEND_TYPE(zf, arg_num) == ZEND_SEND_PREFER_REF)
|
||||
|
||||
#define ZEND_RETURN_VAL 0
|
||||
#define ZEND_RETURN_REF 1
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+13
-7
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -213,7 +213,7 @@ ZEND_API void zend_register_string_constant(char *name, uint name_len, char *str
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC)
|
||||
ZEND_API int zend_get_constant_ex(char *name, uint name_len, zval *result, zend_class_entry *scope TSRMLS_DC)
|
||||
{
|
||||
zend_constant *c;
|
||||
int retval = 1;
|
||||
@@ -222,17 +222,19 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
|
||||
|
||||
if ((colon = memchr(name, ':', name_len)) && colon[1] == ':') {
|
||||
/* class constant */
|
||||
zend_class_entry **ce = NULL, *scope;
|
||||
zend_class_entry **ce = NULL;
|
||||
int class_name_len = colon-name;
|
||||
int const_name_len = name_len - class_name_len - 2;
|
||||
char *constant_name = colon+2;
|
||||
zval **ret_constant;
|
||||
char *class_name;
|
||||
|
||||
if (EG(in_execution)) {
|
||||
scope = EG(scope);
|
||||
} else {
|
||||
scope = CG(active_class_entry);
|
||||
if (!scope) {
|
||||
if (EG(in_execution)) {
|
||||
scope = EG(scope);
|
||||
} else {
|
||||
scope = CG(active_class_entry);
|
||||
}
|
||||
}
|
||||
|
||||
class_name = estrndup(name, class_name_len);
|
||||
@@ -300,6 +302,10 @@ ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC
|
||||
return retval;
|
||||
}
|
||||
|
||||
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC)
|
||||
{
|
||||
return zend_get_constant_ex(name, name_len, result, NULL TSRMLS_CC);
|
||||
}
|
||||
|
||||
ZEND_API int zend_register_constant(zend_constant *c TSRMLS_DC)
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -56,6 +56,7 @@ int zend_shutdown_constants(TSRMLS_D);
|
||||
void zend_register_standard_constants(TSRMLS_D);
|
||||
void clean_non_persistent_constants(TSRMLS_D);
|
||||
ZEND_API int zend_get_constant(char *name, uint name_len, zval *result TSRMLS_DC);
|
||||
ZEND_API int zend_get_constant_ex(char *name, uint name_len, zval *result, zend_class_entry *scope TSRMLS_DC);
|
||||
ZEND_API void zend_register_long_constant(char *name, uint name_len, long lval, int flags, int module_number TSRMLS_DC);
|
||||
ZEND_API void zend_register_double_constant(char *name, uint name_len, double dval, int flags, int module_number TSRMLS_DC);
|
||||
ZEND_API void zend_register_string_constant(char *name, uint name_len, char *strval, int flags, int module_number TSRMLS_DC);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+43
-40
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -32,8 +32,7 @@ zend_class_entry *error_exception_ce;
|
||||
static zend_object_handlers default_exception_handlers;
|
||||
ZEND_API void (*zend_throw_exception_hook)(zval *ex TSRMLS_DC);
|
||||
|
||||
|
||||
void zend_throw_exception_internal(zval *exception TSRMLS_DC)
|
||||
void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
if (exception != NULL) {
|
||||
if (EG(exception)) {
|
||||
@@ -58,11 +57,9 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC)
|
||||
EG(opline_before_exception) = EG(current_execute_data)->opline;
|
||||
EG(current_execute_data)->opline = &EG(active_op_array)->opcodes[EG(active_op_array)->last-1-1];
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
|
||||
|
||||
ZEND_API void zend_clear_exception(TSRMLS_D)
|
||||
ZEND_API void zend_clear_exception(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
if (!EG(exception)) {
|
||||
return;
|
||||
@@ -74,8 +71,9 @@ ZEND_API void zend_clear_exception(TSRMLS_D)
|
||||
EG(opline_before_exception) = NULL;
|
||||
#endif
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_type, int skip_top_traces TSRMLS_DC)
|
||||
static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_type, int skip_top_traces TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval tmp, obj;
|
||||
zend_object *object;
|
||||
@@ -99,17 +97,19 @@ static zend_object_value zend_default_exception_new_ex(zend_class_entry *class_t
|
||||
|
||||
return Z_OBJVAL(obj);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_object_value zend_default_exception_new(zend_class_entry *class_type TSRMLS_DC)
|
||||
static zend_object_value zend_default_exception_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return zend_default_exception_new_ex(class_type, 0 TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_object_value zend_error_exception_new(zend_class_entry *class_type TSRMLS_DC)
|
||||
static zend_object_value zend_error_exception_new(zend_class_entry *class_type TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return zend_default_exception_new_ex(class_type, 2 TSRMLS_CC);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto Exception Exception::__clone()
|
||||
Clone the exception object */
|
||||
@@ -120,7 +120,6 @@ ZEND_METHOD(exception, __clone)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto Exception::__construct(string message, int code)
|
||||
Exception constructor */
|
||||
ZEND_METHOD(exception, __construct)
|
||||
@@ -146,7 +145,6 @@ ZEND_METHOD(exception, __construct)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto ErrorException::__construct(string message, int code, int severity [, string filename [, int lineno]])
|
||||
ErrorException constructor */
|
||||
ZEND_METHOD(error_exception, __construct)
|
||||
@@ -187,7 +185,7 @@ ZEND_METHOD(error_exception, __construct)
|
||||
ZEND_WRONG_PARAM_COUNT(); \
|
||||
}
|
||||
|
||||
static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC)
|
||||
static void _default_exception_get_entry(zval *object, char *name, int name_len, zval *return_value TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval *value;
|
||||
|
||||
@@ -197,7 +195,7 @@ static void _default_exception_get_entry(zval *object, char *name, int name_len,
|
||||
zval_copy_ctor(return_value);
|
||||
INIT_PZVAL(return_value);
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string Exception::getFile()
|
||||
Get the file in which the exception occurred */
|
||||
@@ -209,7 +207,6 @@ ZEND_METHOD(exception, getFile)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto int Exception::getLine()
|
||||
Get the line in which the exception occurred */
|
||||
ZEND_METHOD(exception, getLine)
|
||||
@@ -220,7 +217,6 @@ ZEND_METHOD(exception, getLine)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto string Exception::getMessage()
|
||||
Get the exception message */
|
||||
ZEND_METHOD(exception, getMessage)
|
||||
@@ -231,7 +227,6 @@ ZEND_METHOD(exception, getMessage)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto int Exception::getCode()
|
||||
Get the exception code */
|
||||
ZEND_METHOD(exception, getCode)
|
||||
@@ -242,7 +237,6 @@ ZEND_METHOD(exception, getCode)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto array Exception::getTrace()
|
||||
Get the stack trace for the location in which the exception occurred */
|
||||
ZEND_METHOD(exception, getTrace)
|
||||
@@ -253,7 +247,6 @@ ZEND_METHOD(exception, getTrace)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto int ErrorException::getSeverity()
|
||||
Get the exception severity */
|
||||
ZEND_METHOD(error_exception, getSeverity)
|
||||
@@ -264,7 +257,7 @@ ZEND_METHOD(error_exception, getSeverity)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ ZEND_METHOD(exception, gettraceasstring) */
|
||||
/* {{{ gettraceasstring() macros */
|
||||
#define TRACE_APPEND_CHR(chr) \
|
||||
*str = (char*)erealloc(*str, *len + 1 + 1); \
|
||||
(*str)[(*len)++] = chr
|
||||
@@ -285,7 +278,9 @@ ZEND_METHOD(error_exception, getSeverity)
|
||||
TRACE_APPEND_STRL(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); \
|
||||
}
|
||||
|
||||
static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_key *hash_key)
|
||||
/* }}} */
|
||||
|
||||
static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
|
||||
{
|
||||
char **str;
|
||||
int *len;
|
||||
@@ -381,8 +376,9 @@ static int _build_trace_args(zval **arg, int num_args, va_list args, zend_hash_k
|
||||
}
|
||||
return ZEND_HASH_APPLY_KEEP;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static int _build_trace_string(zval **frame, int num_args, va_list args, zend_hash_key *hash_key)
|
||||
static int _build_trace_string(zval **frame, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
|
||||
{
|
||||
char *s_tmp, **str;
|
||||
int *len, *num;
|
||||
@@ -404,7 +400,7 @@ static int _build_trace_string(zval **frame, int num_args, va_list args, zend_ha
|
||||
} else {
|
||||
line = 0;
|
||||
}
|
||||
s_tmp = emalloc(Z_STRLEN_PP(file) + MAX_LENGTH_OF_LONG + 2 + 1);
|
||||
s_tmp = emalloc(Z_STRLEN_PP(file) + MAX_LENGTH_OF_LONG + 4 + 1);
|
||||
sprintf(s_tmp, "%s(%ld): ", Z_STRVAL_PP(file), line);
|
||||
TRACE_APPEND_STRL(s_tmp, strlen(s_tmp));
|
||||
efree(s_tmp);
|
||||
@@ -425,7 +421,7 @@ static int _build_trace_string(zval **frame, int num_args, va_list args, zend_ha
|
||||
TRACE_APPEND_STR(")\n");
|
||||
return ZEND_HASH_APPLY_KEEP;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string Exception::getTraceAsString()
|
||||
Obtain the backtrace for the exception as a string (instead of an array) */
|
||||
@@ -448,7 +444,7 @@ ZEND_METHOD(exception, getTraceAsString)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
int zend_spprintf(char **message, int max_len, char *format, ...)
|
||||
int zend_spprintf(char **message, int max_len, char *format, ...) /* {{{ */
|
||||
{
|
||||
va_list arg;
|
||||
int len;
|
||||
@@ -458,7 +454,7 @@ int zend_spprintf(char **message, int max_len, char *format, ...)
|
||||
va_end(arg);
|
||||
return len;
|
||||
}
|
||||
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto string Exception::__toString()
|
||||
Obtain the string representation of the Exception object */
|
||||
@@ -522,6 +518,7 @@ ZEND_METHOD(exception, __toString)
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ internal structs */
|
||||
/* All functions that may be used in uncaught exception handlers must be final
|
||||
* and must not throw exceptions. Otherwise we would need a facility to handle
|
||||
* such exceptions in that handler.
|
||||
@@ -564,8 +561,9 @@ static zend_function_entry error_exception_functions[] = {
|
||||
ZEND_ME(error_exception, getSeverity, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_FINAL)
|
||||
{NULL, NULL, NULL}
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
void zend_register_default_exception(TSRMLS_D)
|
||||
void zend_register_default_exception(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
zend_class_entry ce;
|
||||
|
||||
@@ -587,19 +585,21 @@ void zend_register_default_exception(TSRMLS_D)
|
||||
error_exception_ce->create_object = zend_error_exception_new;
|
||||
zend_declare_property_long(error_exception_ce, "severity", sizeof("severity")-1, E_ERROR, ZEND_ACC_PROTECTED TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API zend_class_entry *zend_exception_get_default(TSRMLS_D)
|
||||
ZEND_API zend_class_entry *zend_exception_get_default(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
return default_exception_ce;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
ZEND_API zend_class_entry *zend_get_error_exception(TSRMLS_D)
|
||||
ZEND_API zend_class_entry *zend_get_error_exception(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
return error_exception_ce;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC)
|
||||
ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval *ex;
|
||||
|
||||
@@ -625,9 +625,9 @@ ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *messa
|
||||
zend_throw_exception_internal(ex TSRMLS_CC);
|
||||
return ex;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...)
|
||||
ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...) /* {{{ */
|
||||
{
|
||||
va_list arg;
|
||||
char *message;
|
||||
@@ -640,16 +640,17 @@ ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long cod
|
||||
efree(message);
|
||||
return zexception;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC)
|
||||
ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zval *ex = zend_throw_exception(exception_ce, message, code TSRMLS_CC);
|
||||
zend_update_property_long(default_exception_ce, ex, "severity", sizeof("severity")-1, severity TSRMLS_CC);
|
||||
return ex;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void zend_error_va(int type, const char *file, uint lineno, const char *format, ...)
|
||||
static void zend_error_va(int type, const char *file, uint lineno, const char *format, ...) /* {{{ */
|
||||
{
|
||||
va_list args;
|
||||
|
||||
@@ -657,9 +658,10 @@ static void zend_error_va(int type, const char *file, uint lineno, const char *f
|
||||
zend_error_cb(type, file, lineno, format, args);
|
||||
va_end(args);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* This function doesn't return as it calls E_ERROR */
|
||||
ZEND_API void zend_exception_error(zval *exception TSRMLS_DC)
|
||||
ZEND_API void zend_exception_error(zval *exception TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zend_class_entry *ce_exception = Z_OBJCE_P(exception);
|
||||
if (instanceof_function(ce_exception, default_exception_ce TSRMLS_CC)) {
|
||||
@@ -698,9 +700,9 @@ ZEND_API void zend_exception_error(zval *exception TSRMLS_DC)
|
||||
zend_error(E_ERROR, "Uncaught exception '%s'", ce_exception->name);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC)
|
||||
ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zend_class_entry *exception_ce;
|
||||
|
||||
@@ -715,6 +717,7 @@ ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC)
|
||||
}
|
||||
zend_throw_exception_internal(exception TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+34
-28
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -64,7 +64,7 @@ static void zend_extension_fcall_end_handler(zend_extension *extension, zend_op_
|
||||
|
||||
#define TEMP_VAR_STACK_LIMIT 2000
|
||||
|
||||
static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free)
|
||||
static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free, int unref)
|
||||
{
|
||||
if (!--z->refcount) {
|
||||
z->refcount = 1;
|
||||
@@ -73,7 +73,7 @@ static inline void zend_pzval_unlock_func(zval *z, zend_free_op *should_free)
|
||||
/* should_free->is_var = 1; */
|
||||
} else {
|
||||
should_free->var = 0;
|
||||
if (z->is_ref && z->refcount == 1) {
|
||||
if (unref && z->is_ref && z->refcount == 1) {
|
||||
z->is_ref = 0;
|
||||
}
|
||||
}
|
||||
@@ -87,7 +87,8 @@ static inline void zend_pzval_unlock_free_func(zval *z)
|
||||
}
|
||||
}
|
||||
|
||||
#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f)
|
||||
#define PZVAL_UNLOCK(z, f) zend_pzval_unlock_func(z, f, 1)
|
||||
#define PZVAL_UNLOCK_EX(z, f, u) zend_pzval_unlock_func(z, f, u)
|
||||
#define PZVAL_UNLOCK_FREE(z) zend_pzval_unlock_free_func(z)
|
||||
#define PZVAL_LOCK(z) (z)->refcount++
|
||||
#define RETURN_VALUE_UNUSED(pzn) (((pzn)->u.EA.type & EXT_TYPE_UNUSED))
|
||||
@@ -411,11 +412,7 @@ static void zend_assign_to_variable_reference(zval **variable_ptr_ptr, zval **va
|
||||
*variable_ptr_ptr = value_ptr;
|
||||
value_ptr->refcount++;
|
||||
|
||||
variable_ptr->refcount--;
|
||||
if (variable_ptr->refcount==0) {
|
||||
zendi_zval_dtor(*variable_ptr);
|
||||
FREE_ZVAL(variable_ptr);
|
||||
}
|
||||
zval_ptr_dtor(&variable_ptr);
|
||||
} else if (!variable_ptr->is_ref) {
|
||||
if (variable_ptr_ptr == value_ptr_ptr) {
|
||||
SEPARATE_ZVAL(variable_ptr_ptr);
|
||||
@@ -449,11 +446,12 @@ static inline void make_real_object(zval **object_ptr TSRMLS_DC)
|
||||
}
|
||||
}
|
||||
|
||||
static inline char * zend_verify_arg_class_kind(zend_arg_info *cur_arg_info, zend_class_entry **pce TSRMLS_DC)
|
||||
static inline char * zend_verify_arg_class_kind(zend_arg_info *cur_arg_info, char **class_name, zend_class_entry **pce TSRMLS_DC)
|
||||
{
|
||||
*pce = zend_fetch_class(cur_arg_info->class_name, cur_arg_info->class_name_len, ZEND_FETCH_CLASS_AUTO TSRMLS_CC);
|
||||
*pce = zend_fetch_class(cur_arg_info->class_name, cur_arg_info->class_name_len, (ZEND_FETCH_CLASS_AUTO | ZEND_FETCH_CLASS_NO_AUTOLOAD) TSRMLS_CC);
|
||||
|
||||
if ((*pce)->ce_flags & ZEND_ACC_INTERFACE) {
|
||||
*class_name = (*pce) ? (*pce)->name: cur_arg_info->class_name;
|
||||
if (*pce && (*pce)->ce_flags & ZEND_ACC_INTERFACE) {
|
||||
return "implement interface ";
|
||||
} else {
|
||||
return "be an instance of ";
|
||||
@@ -497,18 +495,20 @@ static inline int zend_verify_arg_type(zend_function *zf, zend_uint arg_num, zva
|
||||
cur_arg_info = &zf->common.arg_info[arg_num-1];
|
||||
|
||||
if (cur_arg_info->class_name) {
|
||||
char *class_name;
|
||||
|
||||
if (!arg) {
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC);
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, "none", "" TSRMLS_CC);
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &class_name, &ce TSRMLS_CC);
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, class_name, "none", "" TSRMLS_CC);
|
||||
}
|
||||
if (Z_TYPE_P(arg) == IS_OBJECT) {
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC);
|
||||
if (!instanceof_function(Z_OBJCE_P(arg), ce TSRMLS_CC)) {
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, "instance of ", Z_OBJCE_P(arg)->name TSRMLS_CC);
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &class_name, &ce TSRMLS_CC);
|
||||
if (!ce || !instanceof_function(Z_OBJCE_P(arg), ce TSRMLS_CC)) {
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, class_name, "instance of ", Z_OBJCE_P(arg)->name TSRMLS_CC);
|
||||
}
|
||||
} else if (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null) {
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &ce TSRMLS_CC);
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, ce->name, zend_zval_type_name(arg), "" TSRMLS_CC);
|
||||
need_msg = zend_verify_arg_class_kind(cur_arg_info, &class_name, &ce TSRMLS_CC);
|
||||
return zend_verify_arg_error(zf, arg_num, cur_arg_info, need_msg, class_name, zend_zval_type_name(arg), "" TSRMLS_CC);
|
||||
}
|
||||
} else if (cur_arg_info->array_type_hint) {
|
||||
if (!arg) {
|
||||
@@ -1163,16 +1163,22 @@ static void zend_fetch_dimension_address(temp_variable *result, zval **container
|
||||
overloaded_result = Z_OBJ_HT_P(container)->read_dimension(container, dim, type TSRMLS_CC);
|
||||
|
||||
if (overloaded_result) {
|
||||
switch (type) {
|
||||
case BP_VAR_RW:
|
||||
case BP_VAR_W:
|
||||
if (Z_TYPE_P(overloaded_result) != IS_OBJECT
|
||||
&& !overloaded_result->is_ref) {
|
||||
zend_error_noreturn(E_ERROR, "Objects used as arrays in post/pre increment/decrement must return values by reference");
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!overloaded_result->is_ref &&
|
||||
(type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET)) {
|
||||
if (overloaded_result->refcount > 0) {
|
||||
zval *tmp = overloaded_result;
|
||||
|
||||
ALLOC_ZVAL(overloaded_result);
|
||||
*overloaded_result = *tmp;
|
||||
zval_copy_ctor(overloaded_result);
|
||||
overloaded_result->is_ref = 0;
|
||||
overloaded_result->refcount = 0;
|
||||
}
|
||||
if (Z_TYPE_P(overloaded_result) != IS_OBJECT) {
|
||||
zend_class_entry *ce = Z_OBJCE_P(container);
|
||||
zend_error(E_NOTICE, "Indirect modification of overloaded element of %s has no effect", ce->name);
|
||||
}
|
||||
}
|
||||
retval = &overloaded_result;
|
||||
} else {
|
||||
retval = &EG(error_zval_ptr);
|
||||
|
||||
+8
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -41,6 +41,12 @@ typedef union _temp_variable {
|
||||
zval *str;
|
||||
zend_uint offset;
|
||||
} str_offset;
|
||||
struct {
|
||||
zval **ptr_ptr;
|
||||
zval *ptr;
|
||||
zend_bool fcall_returned_reference;
|
||||
HashPointer fe_pos;
|
||||
} fe;
|
||||
zend_class_entry *class_entry;
|
||||
} temp_variable;
|
||||
|
||||
@@ -134,6 +140,7 @@ static inline int i_zend_is_true(zval *op)
|
||||
}
|
||||
|
||||
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC);
|
||||
ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC);
|
||||
|
||||
/* dedicated Zend executor functions - do not use! */
|
||||
static inline void zend_ptr_stack_clear_multiple(TSRMLS_D)
|
||||
|
||||
+37
-11
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -188,6 +188,10 @@ void init_executor(TSRMLS_D)
|
||||
EG(scope) = NULL;
|
||||
|
||||
EG(This) = NULL;
|
||||
|
||||
EG(active_op_array) = NULL;
|
||||
|
||||
EG(active) = 1;
|
||||
}
|
||||
|
||||
static int zval_call_destructor(zval **zv TSRMLS_DC)
|
||||
@@ -316,6 +320,7 @@ void shutdown_executor(TSRMLS_D)
|
||||
FREE_HASHTABLE(EG(in_autoload));
|
||||
}
|
||||
} zend_end_try();
|
||||
EG(active) = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -443,7 +448,7 @@ ZEND_API int zend_is_true(zval *op)
|
||||
|
||||
#include "../TSRM/tsrm_strtok_r.h"
|
||||
|
||||
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
|
||||
ZEND_API int zval_update_constant_ex(zval **pp, void *arg, zend_class_entry *scope TSRMLS_DC)
|
||||
{
|
||||
zval *p = *pp;
|
||||
zend_bool inline_change = (zend_bool) (unsigned long) arg;
|
||||
@@ -459,7 +464,7 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
|
||||
refcount = p->refcount;
|
||||
is_ref = p->is_ref;
|
||||
|
||||
if (!zend_get_constant(p->value.str.val, p->value.str.len, &const_value TSRMLS_CC)) {
|
||||
if (!zend_get_constant_ex(p->value.str.val, p->value.str.len, &const_value, scope TSRMLS_CC)) {
|
||||
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
|
||||
p->value.str.val,
|
||||
p->value.str.val);
|
||||
@@ -498,7 +503,7 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
|
||||
zend_hash_move_forward(Z_ARRVAL_P(p));
|
||||
continue;
|
||||
}
|
||||
if (!zend_get_constant(str_index, str_index_len-1, &const_value TSRMLS_CC)) {
|
||||
if (!zend_get_constant_ex(str_index, str_index_len-1, &const_value, scope TSRMLS_CC)) {
|
||||
zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'", str_index, str_index);
|
||||
zend_hash_move_forward(Z_ARRVAL_P(p));
|
||||
continue;
|
||||
@@ -547,6 +552,10 @@ ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
|
||||
return 0;
|
||||
}
|
||||
|
||||
ZEND_API int zval_update_constant(zval **pp, void *arg TSRMLS_DC)
|
||||
{
|
||||
return zval_update_constant_ex(pp, arg, NULL TSRMLS_CC);
|
||||
}
|
||||
|
||||
int call_user_function(HashTable *function_table, zval **object_pp, zval *function_name, zval *retval_ptr, zend_uint param_count, zval *params[] TSRMLS_DC)
|
||||
{
|
||||
@@ -613,6 +622,10 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
|
||||
char *fname, *colon;
|
||||
int fname_len;
|
||||
|
||||
if (!EG(active)) {
|
||||
return FAILURE; /* executor is already inactive */
|
||||
}
|
||||
|
||||
if (EG(exception)) {
|
||||
return FAILURE; /* we would result in an instable executor otherwise */
|
||||
}
|
||||
@@ -790,7 +803,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
|
||||
&& !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC)
|
||||
&& !instanceof_function(check_scope_or_static, calling_scope TSRMLS_CC)) {
|
||||
zend_error(E_ERROR, "Cannot call method %s() of class %s which is not a derived from %s", fname, calling_scope->name, check_scope_or_static->name);
|
||||
return 0;
|
||||
return FAILURE;
|
||||
}
|
||||
} else {
|
||||
char *function_name_lc = zend_str_tolower_dup(fname, fname_len);
|
||||
@@ -857,6 +870,11 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
|
||||
zend_ptr_stack_n_push(&EG(argument_stack), 2, (void *) (long) i, NULL);
|
||||
zend_ptr_stack_clear_multiple(TSRMLS_C);
|
||||
}
|
||||
|
||||
if (call_via_handler) {
|
||||
zval_ptr_dtor(&method_name);
|
||||
zval_ptr_dtor(¶ms_array);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
ALLOC_ZVAL(new_zval);
|
||||
@@ -1100,11 +1118,14 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR
|
||||
int retval;
|
||||
|
||||
if (retval_ptr) {
|
||||
pv.value.str.len = strlen(str)+sizeof("return ;")-1;
|
||||
pv.value.str.val = emalloc(pv.value.str.len+1);
|
||||
strcpy(pv.value.str.val, "return ");
|
||||
strcat(pv.value.str.val, str);
|
||||
strcat(pv.value.str.val, " ;");
|
||||
int l = strlen(str);
|
||||
Z_STRLEN(pv) = l+sizeof("return ;")-1;
|
||||
Z_STRVAL(pv) = emalloc(Z_STRLEN(pv) + 1);
|
||||
memcpy(Z_STRVAL(pv), "return ", sizeof("return ")-1);
|
||||
memcpy(Z_STRVAL(pv) + sizeof("return ")-1, str, l);
|
||||
Z_STRVAL(pv)[Z_STRLEN(pv)-2] = ' ';
|
||||
Z_STRVAL(pv)[Z_STRLEN(pv)-1] = ';';
|
||||
Z_STRVAL(pv)[Z_STRLEN(pv)] = '\0';
|
||||
} else {
|
||||
pv.value.str.len = strlen(str);
|
||||
pv.value.str.val = estrndup(str, pv.value.str.len);
|
||||
@@ -1368,6 +1389,9 @@ void zend_set_timeout(long seconds)
|
||||
TSRMLS_FETCH();
|
||||
|
||||
EG(timeout_seconds) = seconds;
|
||||
if(!seconds) {
|
||||
return;
|
||||
}
|
||||
#ifdef ZEND_WIN32
|
||||
if (timeout_thread_initialized==0 && InterlockedIncrement(&timeout_thread_initialized)==1) {
|
||||
/* We start up this process-wide thread here and not in zend_startup(), because if Zend
|
||||
@@ -1406,7 +1430,9 @@ void zend_set_timeout(long seconds)
|
||||
void zend_unset_timeout(TSRMLS_D)
|
||||
{
|
||||
#ifdef ZEND_WIN32
|
||||
PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0);
|
||||
if(timeout_thread_initialized) {
|
||||
PostThreadMessage(timeout_thread_id, WM_UNREGISTER_ZEND_TIMEOUT, (WPARAM) GetCurrentThreadId(), (LPARAM) 0);
|
||||
}
|
||||
#else
|
||||
# ifdef HAVE_SETITIMER
|
||||
{
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+3
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -237,6 +237,8 @@ struct _zend_executor_globals {
|
||||
|
||||
zend_property_info std_property_info;
|
||||
|
||||
zend_bool active;
|
||||
|
||||
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
|
||||
};
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+79
-25
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -141,11 +141,16 @@ ZEND_API int _zend_hash_init(HashTable *ht, uint nSize, hash_func_t pHashFunctio
|
||||
|
||||
SET_INCONSISTENT(HT_OK);
|
||||
|
||||
while ((1U << i) < nSize) {
|
||||
i++;
|
||||
if (nSize >= 0x80000000) {
|
||||
/* prevent overflow */
|
||||
ht->nTableSize = 0x80000000;
|
||||
} else {
|
||||
while ((1U << i) < nSize) {
|
||||
i++;
|
||||
}
|
||||
ht->nTableSize = 1 << i;
|
||||
}
|
||||
|
||||
ht->nTableSize = 1 << i;
|
||||
ht->nTableMask = ht->nTableSize - 1;
|
||||
ht->pDestructor = pDestructor;
|
||||
ht->arBuckets = NULL;
|
||||
@@ -571,15 +576,6 @@ static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p)
|
||||
Bucket *retval;
|
||||
|
||||
HANDLE_BLOCK_INTERRUPTIONS();
|
||||
|
||||
if (ht->pDestructor) {
|
||||
ht->pDestructor(p->pData);
|
||||
}
|
||||
if (p->pData != &p->pDataPtr) {
|
||||
pefree(p->pData, ht->persistent);
|
||||
}
|
||||
retval = p->pListNext;
|
||||
|
||||
if (p->pLast) {
|
||||
p->pLast->pNext = p->pNext;
|
||||
} else {
|
||||
@@ -608,9 +604,17 @@ static Bucket *zend_hash_apply_deleter(HashTable *ht, Bucket *p)
|
||||
if (ht->pInternalPointer == p) {
|
||||
ht->pInternalPointer = p->pListNext;
|
||||
}
|
||||
pefree(p, ht->persistent);
|
||||
HANDLE_UNBLOCK_INTERRUPTIONS();
|
||||
ht->nNumOfElements--;
|
||||
HANDLE_UNBLOCK_INTERRUPTIONS();
|
||||
|
||||
if (ht->pDestructor) {
|
||||
ht->pDestructor(p->pData);
|
||||
}
|
||||
if (p->pData != &p->pDataPtr) {
|
||||
pefree(p->pData, ht->persistent);
|
||||
}
|
||||
retval = p->pListNext;
|
||||
pefree(p, ht->persistent);
|
||||
|
||||
return retval;
|
||||
}
|
||||
@@ -648,12 +652,15 @@ ZEND_API void zend_hash_graceful_reverse_destroy(HashTable *ht)
|
||||
SET_INCONSISTENT(HT_DESTROYED);
|
||||
}
|
||||
|
||||
/* This is used to selectively delete certain entries from a hashtable.
|
||||
* destruct() receives the data and decides if the entry should be deleted
|
||||
* or not
|
||||
/* This is used to recurse elements and selectively delete certain entries
|
||||
* from a hashtable. apply_func() receives the data and decides if the entry
|
||||
* should be deleted or recursion should be stopped. The following three
|
||||
* return codes are possible:
|
||||
* ZEND_HASH_APPLY_KEEP - continue
|
||||
* ZEND_HASH_APPLY_STOP - stop iteration
|
||||
* ZEND_HASH_APPLY_REMOVE - delete the element, combineable with the former
|
||||
*/
|
||||
|
||||
|
||||
ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
|
||||
{
|
||||
Bucket *p;
|
||||
@@ -663,11 +670,16 @@ ZEND_API void zend_hash_apply(HashTable *ht, apply_func_t apply_func TSRMLS_DC)
|
||||
HASH_PROTECT_RECURSION(ht);
|
||||
p = ht->pListHead;
|
||||
while (p != NULL) {
|
||||
if (apply_func(p->pData TSRMLS_CC)) {
|
||||
int result = apply_func(p->pData TSRMLS_CC);
|
||||
|
||||
if (result & ZEND_HASH_APPLY_REMOVE) {
|
||||
p = zend_hash_apply_deleter(ht, p);
|
||||
} else {
|
||||
p = p->pListNext;
|
||||
}
|
||||
if (result & ZEND_HASH_APPLY_STOP) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
HASH_UNPROTECT_RECURSION(ht);
|
||||
}
|
||||
@@ -682,17 +694,22 @@ ZEND_API void zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t appl
|
||||
HASH_PROTECT_RECURSION(ht);
|
||||
p = ht->pListHead;
|
||||
while (p != NULL) {
|
||||
if (apply_func(p->pData, argument TSRMLS_CC)) {
|
||||
int result = apply_func(p->pData, argument TSRMLS_CC);
|
||||
|
||||
if (result & ZEND_HASH_APPLY_REMOVE) {
|
||||
p = zend_hash_apply_deleter(ht, p);
|
||||
} else {
|
||||
p = p->pListNext;
|
||||
}
|
||||
if (result & ZEND_HASH_APPLY_STOP) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
HASH_UNPROTECT_RECURSION(ht);
|
||||
}
|
||||
|
||||
|
||||
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t destruct, int num_args, ...)
|
||||
ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int num_args, ...)
|
||||
{
|
||||
Bucket *p;
|
||||
va_list args;
|
||||
@@ -704,15 +721,21 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t de
|
||||
|
||||
p = ht->pListHead;
|
||||
while (p != NULL) {
|
||||
int result;
|
||||
va_start(args, num_args);
|
||||
hash_key.arKey = p->arKey;
|
||||
hash_key.nKeyLength = p->nKeyLength;
|
||||
hash_key.h = p->h;
|
||||
if (destruct(p->pData, num_args, args, &hash_key)) {
|
||||
result = apply_func(p->pData, num_args, args, &hash_key);
|
||||
|
||||
if (result & ZEND_HASH_APPLY_REMOVE) {
|
||||
p = zend_hash_apply_deleter(ht, p);
|
||||
} else {
|
||||
p = p->pListNext;
|
||||
}
|
||||
if (result & ZEND_HASH_APPLY_STOP) {
|
||||
break;
|
||||
}
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
@@ -755,7 +778,7 @@ ZEND_API void zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_fun
|
||||
p = source->pListHead;
|
||||
while (p) {
|
||||
if (p->nKeyLength) {
|
||||
zend_hash_update(target, p->arKey, p->nKeyLength, p->pData, size, &new_entry);
|
||||
zend_hash_quick_update(target, p->arKey, p->nKeyLength, p->h, p->pData, size, &new_entry);
|
||||
} else {
|
||||
zend_hash_index_update(target, p->h, p->pData, size, &new_entry);
|
||||
}
|
||||
@@ -780,7 +803,7 @@ ZEND_API void _zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_f
|
||||
p = source->pListHead;
|
||||
while (p) {
|
||||
if (p->nKeyLength>0) {
|
||||
if (_zend_hash_add_or_update(target, p->arKey, p->nKeyLength, p->pData, size, &t, mode ZEND_FILE_LINE_RELAY_CC)==SUCCESS && pCopyConstructor) {
|
||||
if (_zend_hash_quick_add_or_update(target, p->arKey, p->nKeyLength, p->h, p->pData, size, &t, mode ZEND_FILE_LINE_RELAY_CC)==SUCCESS && pCopyConstructor) {
|
||||
pCopyConstructor(t);
|
||||
}
|
||||
} else {
|
||||
@@ -988,6 +1011,37 @@ ZEND_API int zend_hash_num_elements(HashTable *ht)
|
||||
}
|
||||
|
||||
|
||||
ZEND_API int zend_hash_get_pointer(HashTable *ht, HashPointer *ptr)
|
||||
{
|
||||
ptr->pos = ht->pInternalPointer;
|
||||
if (ht->pInternalPointer) {
|
||||
ptr->h = ht->pInternalPointer->h;
|
||||
return 1;
|
||||
} else {
|
||||
ptr->h = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr)
|
||||
{
|
||||
if (ht->pInternalPointer != ptr->pos) {
|
||||
Bucket *p;
|
||||
|
||||
IS_CONSISTENT(ht);
|
||||
p = ht->arBuckets[ptr->h & ht->nTableMask];
|
||||
while (p != NULL) {
|
||||
if (p == ptr->pos) {
|
||||
ht->pInternalPointer = p;
|
||||
return 1;
|
||||
}
|
||||
p = p->pNext;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos)
|
||||
{
|
||||
IS_CONSISTENT(ht);
|
||||
|
||||
+9
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
@@ -176,6 +176,14 @@ ZEND_API void zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *p
|
||||
ZEND_API void zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos);
|
||||
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, char *str_index, uint str_length, ulong num_index, HashPosition *pos);
|
||||
|
||||
typedef struct _HashPointer {
|
||||
HashPosition pos;
|
||||
ulong h;
|
||||
} HashPointer;
|
||||
|
||||
ZEND_API int zend_hash_get_pointer(HashTable *ht, HashPointer *ptr);
|
||||
ZEND_API int zend_hash_set_pointer(HashTable *ht, const HashPointer *ptr);
|
||||
|
||||
#define zend_hash_has_more_elements(ht) \
|
||||
zend_hash_has_more_elements_ex(ht, NULL)
|
||||
#define zend_hash_move_forward(ht) \
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2006 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend license, |
|
||||
| that is bundled with this package in the file LICENSE, and is |
|
||||
|
||||
Loaded 100 of 1653 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user