Don't serialize cppext instances unless they opt-in, and pass the class name for the debugger
Most CPP extension classes don’t think about serialization, and some require more initialization than the default contractor provides. The result is that on deserialization we end up with a partially initialized object, and undefined behavior after that. Modified the serializer to emit __PHP_Unserializable_Class instead, and just the class name for the debugger case. Modified the deserializer to create a __PHP_Unserializable_Class, too, if we are given a string with a CPP extension instance in it, so we're safe on both sides. I do not raise a warning; the results are pretty clear, I think, and it's also unlikely that most such warnings could (or should) be corrected. Finally, I also removed the odd behavior of emitting "dummy" classes for Closure and Continuation. I found no use of these in any source tree. Closure had no implementation at all, and Continuation had an implementation that simply raised a fatal on any method call. Thus we can safely assume that even if someone was serializing one of these types, they were receiving an object that was useless to them, or would fatal. So I believe this transformation is safe.
Esse commit está contido em:
@@ -60,8 +60,9 @@ public:
|
||||
// need a non-zero number for const char * maps
|
||||
IsNothing = (1 << 13),
|
||||
|
||||
HasDocComment = (1 << 14), // x x
|
||||
HasDocComment = (1 << 14), // x x x
|
||||
HasGeneratorAsBody = (1 << 15), // x x
|
||||
IsCppSerializable = (1 << 15), // x
|
||||
HipHopSpecific = (1 << 16), // x x
|
||||
|
||||
VariableArguments = (1 << 17), // x x
|
||||
|
||||
@@ -557,6 +557,8 @@ void ObjectData::serialize(VariableSerializer* serializer) const {
|
||||
|
||||
static StaticString s_PHP_Incomplete_Class("__PHP_Incomplete_Class");
|
||||
static StaticString s_PHP_Incomplete_Class_Name("__PHP_Incomplete_Class_Name");
|
||||
static StaticString s_PHP_Unserializable_Class_Name(
|
||||
"__PHP_Unserializable_Class_Name");
|
||||
|
||||
void ObjectData::serializeImpl(VariableSerializer* serializer) const {
|
||||
bool handleSleep = false;
|
||||
@@ -577,6 +579,15 @@ void ObjectData::serializeImpl(VariableSerializer* serializer) const {
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Only serialize CPP extension type instances which can actually
|
||||
// be deserialized.
|
||||
if ((builtinPropSize() > 0) && !getVMClass()->isCppSerializable()) {
|
||||
Object placeholder = ObjectData::newInstance(
|
||||
SystemLib::s___PHP_Unserializable_ClassClass);
|
||||
placeholder->o_set(s_PHP_Unserializable_Class_Name, o_getClassName());
|
||||
placeholder->serialize(serializer);
|
||||
return;
|
||||
}
|
||||
handleSleep = const_cast<ObjectData*>(this)->php_sleep(ret);
|
||||
} else if (UNLIKELY(serializer->getType() ==
|
||||
VariableSerializer::Type::DebuggerSerialize)) {
|
||||
@@ -602,12 +613,18 @@ void ObjectData::serializeImpl(VariableSerializer* serializer) const {
|
||||
}
|
||||
return;
|
||||
}
|
||||
// Don't try to serialize a CPP extension class which doesn't
|
||||
// support serialization. Just send the class name instead.
|
||||
if ((builtinPropSize() > 0) && !getVMClass()->isCppSerializable()) {
|
||||
serializer->write(o_getClassName());
|
||||
return;
|
||||
}
|
||||
try {
|
||||
handleSleep = const_cast<ObjectData*>(this)->php_sleep(ret);
|
||||
} catch (...) {
|
||||
raise_warning("%s::sleep() throws exception", o_getClassName().data());
|
||||
ret = uninit_null();
|
||||
handleSleep = true;
|
||||
serializer->writeNull();
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (UNLIKELY(handleSleep)) {
|
||||
@@ -639,32 +656,10 @@ void ObjectData::serializeImpl(VariableSerializer* serializer) const {
|
||||
serializer->setObjectInfo(o_getClassName(), o_getId(), 'O');
|
||||
wanted.serialize(serializer, true);
|
||||
} else {
|
||||
if (instanceof(c_Closure::s_cls)) {
|
||||
if (serializer->getType() == VariableSerializer::Type::APCSerialize) {
|
||||
p_DummyClosure dummy(NEWOBJ(c_DummyClosure));
|
||||
serializer->write(dummy);
|
||||
} else if (serializer->getType() ==
|
||||
VariableSerializer::Type::DebuggerSerialize) {
|
||||
serializer->write("Closure");
|
||||
} else {
|
||||
throw_fatal("Serialization of Closure is not allowed");
|
||||
}
|
||||
} else if (instanceof(c_Continuation::s_cls)) {
|
||||
if (serializer->getType() == VariableSerializer::Type::APCSerialize) {
|
||||
p_DummyContinuation dummy(NEWOBJ(c_DummyContinuation));
|
||||
serializer->write(dummy);
|
||||
} else if (serializer->getType() ==
|
||||
VariableSerializer::Type::DebuggerSerialize) {
|
||||
serializer->write("Continuation");
|
||||
} else {
|
||||
throw_fatal("Serialization of Continuation is not allowed");
|
||||
}
|
||||
} else {
|
||||
raise_warning("serialize(): __sleep should return an array only "
|
||||
"containing the names of instance-variables to "
|
||||
"serialize");
|
||||
uninit_null().serialize(serializer);
|
||||
}
|
||||
raise_warning("serialize(): __sleep should return an array only "
|
||||
"containing the names of instance-variables to "
|
||||
"serialize");
|
||||
uninit_null().serialize(serializer);
|
||||
}
|
||||
} else {
|
||||
if (isCollection()) {
|
||||
|
||||
@@ -62,6 +62,8 @@ static StaticString s_1("1");
|
||||
static StaticString s_unserialize("unserialize");
|
||||
static StaticString s_PHP_Incomplete_Class("__PHP_Incomplete_Class");
|
||||
static StaticString s_PHP_Incomplete_Class_Name("__PHP_Incomplete_Class_Name");
|
||||
static StaticString s_PHP_Unserializable_Class_Name(
|
||||
"__PHP_Unserializable_Class_Name");
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// local helpers
|
||||
@@ -1880,9 +1882,18 @@ void Variant::unserialize(VariableUnserializer *uns,
|
||||
}
|
||||
}
|
||||
if (cls) {
|
||||
obj = ObjectData::newInstance(cls);
|
||||
if (UNLIKELY(cls == c_Pair::s_cls && size != 2)) {
|
||||
throw Exception("Pair objects must have exactly 2 elements");
|
||||
// Only unserialize CPP extension types which can actually
|
||||
// support it. Otherwise, we risk creating a CPP object
|
||||
// without having it intialized completely.
|
||||
if ((cls->builtinPropSize() > 0) && !cls->isCppSerializable()) {
|
||||
obj = ObjectData::newInstance(
|
||||
SystemLib::s___PHP_Unserializable_ClassClass);
|
||||
obj->o_set(s_PHP_Unserializable_Class_Name, clsName);
|
||||
} else {
|
||||
obj = ObjectData::newInstance(cls);
|
||||
if (UNLIKELY(cls == c_Pair::s_cls && size != 2)) {
|
||||
throw Exception("Pair objects must have exactly 2 elements");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
obj = ObjectData::newInstance(
|
||||
|
||||
@@ -78,12 +78,6 @@ c_Closure* c_Closure::clone() {
|
||||
return closure;
|
||||
}
|
||||
|
||||
|
||||
bool c_Closure::php_sleep(Variant &ret) {
|
||||
ret = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
HphpArray* c_Closure::getStaticLocals() {
|
||||
if (m_VMStatics.get() == NULL) {
|
||||
m_VMStatics = ArrayData::Make(1);
|
||||
@@ -91,16 +85,5 @@ HphpArray* c_Closure::getStaticLocals() {
|
||||
return m_VMStatics.get();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
c_DummyClosure::c_DummyClosure(Class* cb) :
|
||||
ExtObjectData(cb) {
|
||||
}
|
||||
|
||||
c_DummyClosure::~c_DummyClosure() {}
|
||||
|
||||
void c_DummyClosure::t___construct() {
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
@@ -55,33 +55,12 @@ public:
|
||||
static size_t funcOffset() { return offsetof(c_Closure, m_func); }
|
||||
static size_t thisOffset() { return offsetof(c_Closure, m_thisOrClass); }
|
||||
|
||||
protected:
|
||||
virtual bool php_sleep(Variant &ret);
|
||||
private:
|
||||
SmartPtr<HphpArray> m_VMStatics;
|
||||
ObjectData* m_thisOrClass;
|
||||
const Func* m_func;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// class DummyClosure
|
||||
|
||||
FORWARD_DECLARE_CLASS_BUILTIN(DummyClosure);
|
||||
class c_DummyClosure : public ExtObjectData {
|
||||
public:
|
||||
DECLARE_CLASS(DummyClosure, DummyClosure, ObjectData)
|
||||
|
||||
// need to implement
|
||||
public: c_DummyClosure(Class* cls = c_DummyClosure::s_cls);
|
||||
public: ~c_DummyClosure();
|
||||
public: void t___construct();
|
||||
|
||||
// implemented by HPHP
|
||||
public: c_DummyClosure *create();
|
||||
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
#endif // incl_HPHP_EXT_CLOSURE_H_
|
||||
|
||||
@@ -104,11 +104,6 @@ Variant c_Continuation::t_key() {
|
||||
return m_key;
|
||||
}
|
||||
|
||||
bool c_Continuation::php_sleep(Variant &ret) {
|
||||
ret = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void c_Continuation::t_next() {
|
||||
const_assert(false);
|
||||
}
|
||||
@@ -252,39 +247,5 @@ void c_Continuation::call_raise(ObjectData* e) {
|
||||
g_vmContext->invokeContFunc(func, this, &arg);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
c_DummyContinuation::c_DummyContinuation(Class* cb) :
|
||||
ExtObjectData(cb) {
|
||||
}
|
||||
|
||||
c_DummyContinuation::~c_DummyContinuation() {}
|
||||
|
||||
void c_DummyContinuation::t___construct() {
|
||||
}
|
||||
|
||||
Variant c_DummyContinuation::t_current() {
|
||||
throw_fatal("Tring to use a DummyContinuation");
|
||||
return uninit_null();
|
||||
}
|
||||
|
||||
Variant c_DummyContinuation::t_key() {
|
||||
throw_fatal("Tring to use a DummyContinuation");
|
||||
return uninit_null();
|
||||
}
|
||||
|
||||
void c_DummyContinuation::t_next() {
|
||||
throw_fatal("Tring to use a DummyContinuation");
|
||||
}
|
||||
|
||||
void c_DummyContinuation::t_rewind() {
|
||||
throw_fatal("Tring to use a DummyContinuation");
|
||||
}
|
||||
|
||||
bool c_DummyContinuation::t_valid() {
|
||||
throw_fatal("Tring to use a DummyContinuation");
|
||||
return false;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
@@ -108,7 +108,6 @@ public:
|
||||
return arOffset;
|
||||
}
|
||||
|
||||
protected: virtual bool php_sleep(Variant &ret);
|
||||
public:
|
||||
void call_next();
|
||||
void call_send(Cell& v);
|
||||
@@ -160,26 +159,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// class DummyContinuation
|
||||
|
||||
FORWARD_DECLARE_CLASS_BUILTIN(DummyContinuation);
|
||||
class c_DummyContinuation : public ExtObjectData {
|
||||
public:
|
||||
DECLARE_CLASS(DummyContinuation, DummyContinuation, ObjectData)
|
||||
|
||||
// need to implement
|
||||
public: c_DummyContinuation(Class* cls = c_DummyContinuation::s_cls);
|
||||
public: ~c_DummyContinuation();
|
||||
public: void t___construct();
|
||||
public: Variant t_current();
|
||||
public: Variant t_key();
|
||||
public: void t_next();
|
||||
public: void t_rewind();
|
||||
public: bool t_valid();
|
||||
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
}
|
||||
|
||||
|
||||
@@ -2430,4 +2430,11 @@ void Class::getChildren(std::vector<TypedValue *> &out) {
|
||||
}
|
||||
}
|
||||
|
||||
// True if a CPP extension class has opted into serialization.
|
||||
bool Class::isCppSerializable() const {
|
||||
assert(builtinPropSize() > 0); // Only call this on CPP classes
|
||||
return clsInfo() &&
|
||||
(clsInfo()->getAttribute() & ClassInfo::IsCppSerializable);
|
||||
}
|
||||
|
||||
} // HPHP::VM
|
||||
|
||||
@@ -578,6 +578,7 @@ public:
|
||||
|
||||
int builtinPropSize() const { return m_builtinPropSize; }
|
||||
BuiltinCtorFunction instanceCtor() const { return m_InstanceCtor; }
|
||||
bool isCppSerializable() const;
|
||||
|
||||
// Interfaces this class declares in its "implements" clause.
|
||||
const std::vector<ClassPtr>& declInterfaces() const {
|
||||
|
||||
@@ -130,6 +130,7 @@ define('IsReference', 1 << 11);
|
||||
define('IsConstructor', 1 << 12);
|
||||
define('IsNothing', 1 << 13);
|
||||
define('HasDocComment', 1 << 14);
|
||||
define('IsCppSerializable', 1 << 15);
|
||||
define('HipHopSpecific', 1 << 16);
|
||||
define('VariableArguments', 1 << 17);
|
||||
define('RefVariableArguments', 1 << 18);
|
||||
|
||||
@@ -25,26 +25,6 @@
|
||||
],
|
||||
"consts": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DummyClosure",
|
||||
"desc": "Represents an invalid closure which will fatal when used.",
|
||||
"flags": [
|
||||
],
|
||||
"funcs": [
|
||||
{
|
||||
"name": "__construct",
|
||||
"args": [
|
||||
],
|
||||
"return": {
|
||||
"type": null
|
||||
},
|
||||
"flags": [
|
||||
]
|
||||
}
|
||||
],
|
||||
"consts": [
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -13,6 +13,7 @@
|
||||
"desc": "An ordered collection where values are keyed using integers 0 thru n-1 in order.",
|
||||
"flags": [
|
||||
"IsFinal",
|
||||
"IsCppSerializable",
|
||||
"HasDocComment"
|
||||
],
|
||||
"footer": "\n private:\n TypedValue* m_data;\n int size;\n int capacity;",
|
||||
@@ -749,6 +750,7 @@
|
||||
"desc": "An unordered dictionary-style collection.",
|
||||
"flags": [
|
||||
"IsFinal",
|
||||
"IsCppSerializable",
|
||||
"HasDocComment"
|
||||
],
|
||||
"funcs": [
|
||||
@@ -1442,6 +1444,7 @@
|
||||
"desc": "An ordered dictionary-style collection.",
|
||||
"flags": [
|
||||
"IsFinal",
|
||||
"IsCppSerializable",
|
||||
"HasDocComment"
|
||||
],
|
||||
"funcs": [
|
||||
@@ -2135,6 +2138,7 @@
|
||||
"desc": "An unordered set-style collection.",
|
||||
"flags": [
|
||||
"IsFinal",
|
||||
"IsCppSerializable",
|
||||
"HasDocComment"
|
||||
],
|
||||
"funcs": [
|
||||
@@ -2645,6 +2649,7 @@
|
||||
"desc": "An ordered fixed-sized container.",
|
||||
"flags": [
|
||||
"IsFinal",
|
||||
"IsCppSerializable",
|
||||
"HasDocComment"
|
||||
],
|
||||
"footer": "\n private:\n int size;\n int capacity;",
|
||||
|
||||
@@ -194,79 +194,6 @@
|
||||
],
|
||||
"consts": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DummyContinuation",
|
||||
"ifaces": [
|
||||
"Iterator"
|
||||
],
|
||||
"desc": "Represents an invalid continuation which will fatal when used.",
|
||||
"flags": [
|
||||
],
|
||||
"funcs": [
|
||||
{
|
||||
"name": "__construct",
|
||||
"args": [
|
||||
],
|
||||
"return": {
|
||||
"type": null
|
||||
},
|
||||
"flags": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "current",
|
||||
"return": {
|
||||
"type": "Variant"
|
||||
},
|
||||
"flags": [
|
||||
],
|
||||
"args": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "key",
|
||||
"return": {
|
||||
"type": "Int64"
|
||||
},
|
||||
"flags": [
|
||||
],
|
||||
"args": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "next",
|
||||
"return": {
|
||||
"type": null
|
||||
},
|
||||
"flags": [
|
||||
],
|
||||
"args": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "rewind",
|
||||
"return": {
|
||||
"type": null
|
||||
},
|
||||
"flags": [
|
||||
],
|
||||
"args": [
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "valid",
|
||||
"return": {
|
||||
"type": "Boolean"
|
||||
},
|
||||
"flags": [
|
||||
],
|
||||
"args": [
|
||||
]
|
||||
}
|
||||
],
|
||||
"consts": [
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -8,3 +8,9 @@ class stdClass {
|
||||
class __PHP_Incomplete_Class {
|
||||
public $__PHP_Incomplete_Class_Name;
|
||||
}
|
||||
|
||||
// Used in serialize() for classes which don't support
|
||||
// serialization. Typically CPP Extension classes.
|
||||
class __PHP_Unserializable_Class {
|
||||
public $__PHP_Unserializable_Class_Name;
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ namespace Eval {
|
||||
x(IterableView) \
|
||||
x(KeyedIterableView) \
|
||||
x(__PHP_Incomplete_Class) \
|
||||
x(__PHP_Unserializable_Class) \
|
||||
|
||||
class SystemLib {
|
||||
public:
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
Collator
|
||||
HipHop Warning: Collator::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: Collator::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(Collator)#1 (0) {
|
||||
}
|
||||
string(19) "O:8:"Collator":0:{}"
|
||||
object(Collator)#2 (0) {
|
||||
string(92) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:8:"Collator";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(8) "Collator"
|
||||
}
|
||||
array(13) {
|
||||
[0]=>
|
||||
@@ -35,15 +37,15 @@ array(13) {
|
||||
}
|
||||
================
|
||||
A_Collator
|
||||
HipHop Warning: Collator::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: Collator::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_Collator)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(35) "O:10:"A_Collator":1:{s:4:"___x";N;}"
|
||||
object(A_Collator)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"A_Collator";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "A_Collator"
|
||||
}
|
||||
array(13) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMAttr
|
||||
HipHop Warning: DOMAttr::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMAttr::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMAttr)#1 (0) {
|
||||
}
|
||||
string(18) "O:7:"DOMAttr":0:{}"
|
||||
object(DOMAttr)#2 (0) {
|
||||
string(91) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:7:"DOMAttr";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(7) "DOMAttr"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
@@ -53,15 +55,15 @@ array(22) {
|
||||
}
|
||||
================
|
||||
A_DOMAttr
|
||||
HipHop Warning: DOMAttr::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMAttr::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMAttr)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(33) "O:9:"A_DOMAttr":1:{s:4:"___x";N;}"
|
||||
object(A_DOMAttr)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"A_DOMAttr";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "A_DOMAttr"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMCDATASection
|
||||
HipHop Warning: DOMCDATASection::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMCDATASection::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMCDATASection)#1 (0) {
|
||||
}
|
||||
string(27) "O:15:"DOMCDATASection":0:{}"
|
||||
object(DOMCDATASection)#2 (0) {
|
||||
string(100) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:15:"DOMCDATASection";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(15) "DOMCDATASection"
|
||||
}
|
||||
array(28) {
|
||||
[0]=>
|
||||
@@ -65,15 +67,15 @@ array(28) {
|
||||
}
|
||||
================
|
||||
A_DOMCDATASection
|
||||
HipHop Warning: DOMCDATASection::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMCDATASection::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMCDATASection)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(42) "O:17:"A_DOMCDATASection":1:{s:4:"___x";N;}"
|
||||
object(A_DOMCDATASection)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(102) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:17:"A_DOMCDATASection";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(17) "A_DOMCDATASection"
|
||||
}
|
||||
array(28) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMCharacterData
|
||||
object(DOMCharacterData)#1 (0) {
|
||||
}
|
||||
string(28) "O:16:"DOMCharacterData":0:{}"
|
||||
object(DOMCharacterData)#2 (0) {
|
||||
string(101) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:16:"DOMCharacterData";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(16) "DOMCharacterData"
|
||||
}
|
||||
array(26) {
|
||||
[0]=>
|
||||
@@ -64,10 +66,10 @@ object(A_DOMCharacterData)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(43) "O:18:"A_DOMCharacterData":1:{s:4:"___x";N;}"
|
||||
object(A_DOMCharacterData)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(103) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:18:"A_DOMCharacterData";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(18) "A_DOMCharacterData"
|
||||
}
|
||||
array(26) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMComment
|
||||
object(DOMComment)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"DOMComment":0:{}"
|
||||
object(DOMComment)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"DOMComment";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "DOMComment"
|
||||
}
|
||||
array(26) {
|
||||
[0]=>
|
||||
@@ -64,10 +66,10 @@ object(A_DOMComment)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_DOMComment":1:{s:4:"___x";N;}"
|
||||
object(A_DOMComment)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_DOMComment";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_DOMComment"
|
||||
}
|
||||
array(26) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMDocument
|
||||
object(DOMDocument)#1 (0) {
|
||||
}
|
||||
string(23) "O:11:"DOMDocument":0:{}"
|
||||
object(DOMDocument)#2 (0) {
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"DOMDocument";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "DOMDocument"
|
||||
}
|
||||
array(51) {
|
||||
[0]=>
|
||||
@@ -114,10 +116,10 @@ object(A_DOMDocument)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(38) "O:13:"A_DOMDocument":1:{s:4:"___x";N;}"
|
||||
object(A_DOMDocument)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(98) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:13:"A_DOMDocument";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(13) "A_DOMDocument"
|
||||
}
|
||||
array(51) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMDocumentFragment
|
||||
object(DOMDocumentFragment)#1 (0) {
|
||||
}
|
||||
string(31) "O:19:"DOMDocumentFragment":0:{}"
|
||||
object(DOMDocumentFragment)#2 (0) {
|
||||
string(104) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:19:"DOMDocumentFragment";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(19) "DOMDocumentFragment"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
@@ -56,10 +58,10 @@ object(A_DOMDocumentFragment)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(46) "O:21:"A_DOMDocumentFragment":1:{s:4:"___x";N;}"
|
||||
object(A_DOMDocumentFragment)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(106) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:21:"A_DOMDocumentFragment";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(21) "A_DOMDocumentFragment"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMDocumentType
|
||||
object(DOMDocumentType)#1 (0) {
|
||||
}
|
||||
string(27) "O:15:"DOMDocumentType":0:{}"
|
||||
object(DOMDocumentType)#2 (0) {
|
||||
string(100) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:15:"DOMDocumentType";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(15) "DOMDocumentType"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -54,10 +56,10 @@ object(A_DOMDocumentType)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(42) "O:17:"A_DOMDocumentType":1:{s:4:"___x";N;}"
|
||||
object(A_DOMDocumentType)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(102) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:17:"A_DOMDocumentType";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(17) "A_DOMDocumentType"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMElement
|
||||
HipHop Warning: DOMElement::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMElement::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMElement)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"DOMElement":0:{}"
|
||||
object(DOMElement)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"DOMElement";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "DOMElement"
|
||||
}
|
||||
array(39) {
|
||||
[0]=>
|
||||
@@ -87,15 +89,15 @@ array(39) {
|
||||
}
|
||||
================
|
||||
A_DOMElement
|
||||
HipHop Warning: DOMElement::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMElement::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMElement)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_DOMElement":1:{s:4:"___x";N;}"
|
||||
object(A_DOMElement)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_DOMElement";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_DOMElement"
|
||||
}
|
||||
array(39) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMEntity
|
||||
object(DOMEntity)#1 (0) {
|
||||
}
|
||||
string(20) "O:9:"DOMEntity":0:{}"
|
||||
object(DOMEntity)#2 (0) {
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"DOMEntity";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "DOMEntity"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -54,10 +56,10 @@ object(A_DOMEntity)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(36) "O:11:"A_DOMEntity":1:{s:4:"___x";N;}"
|
||||
object(A_DOMEntity)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"A_DOMEntity";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "A_DOMEntity"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMEntityReference
|
||||
HipHop Warning: DOMEntityReference::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMEntityReference::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMEntityReference)#1 (0) {
|
||||
}
|
||||
string(30) "O:18:"DOMEntityReference":0:{}"
|
||||
object(DOMEntityReference)#2 (0) {
|
||||
string(103) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:18:"DOMEntityReference";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(18) "DOMEntityReference"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -51,15 +53,15 @@ array(21) {
|
||||
}
|
||||
================
|
||||
A_DOMEntityReference
|
||||
HipHop Warning: DOMEntityReference::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMEntityReference::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMEntityReference)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(45) "O:20:"A_DOMEntityReference":1:{s:4:"___x";N;}"
|
||||
object(A_DOMEntityReference)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(105) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:20:"A_DOMEntityReference";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(20) "A_DOMEntityReference"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMNamedNodeMap
|
||||
object(DOMNamedNodeMap)#1 (0) {
|
||||
}
|
||||
string(27) "O:15:"DOMNamedNodeMap":0:{}"
|
||||
object(DOMNamedNodeMap)#2 (0) {
|
||||
string(100) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:15:"DOMNamedNodeMap";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(15) "DOMNamedNodeMap"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
@@ -28,10 +30,10 @@ object(A_DOMNamedNodeMap)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(42) "O:17:"A_DOMNamedNodeMap":1:{s:4:"___x";N;}"
|
||||
object(A_DOMNamedNodeMap)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(102) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:17:"A_DOMNamedNodeMap";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(17) "A_DOMNamedNodeMap"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMNode
|
||||
object(DOMNode)#1 (0) {
|
||||
}
|
||||
string(18) "O:7:"DOMNode":0:{}"
|
||||
object(DOMNode)#2 (0) {
|
||||
string(91) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:7:"DOMNode";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(7) "DOMNode"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -54,10 +56,10 @@ object(A_DOMNode)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(33) "O:9:"A_DOMNode":1:{s:4:"___x";N;}"
|
||||
object(A_DOMNode)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"A_DOMNode";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "A_DOMNode"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMNodeIterator
|
||||
object(DOMNodeIterator)#1 (0) {
|
||||
}
|
||||
string(27) "O:15:"DOMNodeIterator":0:{}"
|
||||
object(DOMNodeIterator)#2 (0) {
|
||||
string(100) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:15:"DOMNodeIterator";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(15) "DOMNodeIterator"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
@@ -24,10 +26,10 @@ object(A_DOMNodeIterator)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(42) "O:17:"A_DOMNodeIterator":1:{s:4:"___x";N;}"
|
||||
object(A_DOMNodeIterator)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(102) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:17:"A_DOMNodeIterator";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(17) "A_DOMNodeIterator"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMNodeList
|
||||
object(DOMNodeList)#1 (0) {
|
||||
}
|
||||
string(23) "O:11:"DOMNodeList":0:{}"
|
||||
object(DOMNodeList)#2 (0) {
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"DOMNodeList";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "DOMNodeList"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
@@ -24,10 +26,10 @@ object(A_DOMNodeList)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(38) "O:13:"A_DOMNodeList":1:{s:4:"___x";N;}"
|
||||
object(A_DOMNodeList)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(98) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:13:"A_DOMNodeList";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(13) "A_DOMNodeList"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMNotation
|
||||
object(DOMNotation)#1 (0) {
|
||||
}
|
||||
string(23) "O:11:"DOMNotation":0:{}"
|
||||
object(DOMNotation)#2 (0) {
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"DOMNotation";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "DOMNotation"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -54,10 +56,10 @@ object(A_DOMNotation)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(38) "O:13:"A_DOMNotation":1:{s:4:"___x";N;}"
|
||||
object(A_DOMNotation)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(98) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:13:"A_DOMNotation";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(13) "A_DOMNotation"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMProcessingInstruction
|
||||
HipHop Warning: DOMProcessingInstruction::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMProcessingInstruction::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMProcessingInstruction)#1 (0) {
|
||||
}
|
||||
string(36) "O:24:"DOMProcessingInstruction":0:{}"
|
||||
object(DOMProcessingInstruction)#2 (0) {
|
||||
string(109) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:24:"DOMProcessingInstruction";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(24) "DOMProcessingInstruction"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -51,15 +53,15 @@ array(21) {
|
||||
}
|
||||
================
|
||||
A_DOMProcessingInstruction
|
||||
HipHop Warning: DOMProcessingInstruction::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMProcessingInstruction::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMProcessingInstruction)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(51) "O:26:"A_DOMProcessingInstruction":1:{s:4:"___x";N;}"
|
||||
object(A_DOMProcessingInstruction)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(111) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:26:"A_DOMProcessingInstruction";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(26) "A_DOMProcessingInstruction"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DOMText
|
||||
object(DOMText)#1 (0) {
|
||||
}
|
||||
string(18) "O:7:"DOMText":0:{}"
|
||||
object(DOMText)#2 (0) {
|
||||
string(91) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:7:"DOMText";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(7) "DOMText"
|
||||
}
|
||||
array(28) {
|
||||
[0]=>
|
||||
@@ -68,10 +70,10 @@ object(A_DOMText)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(33) "O:9:"A_DOMText":1:{s:4:"___x";N;}"
|
||||
object(A_DOMText)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"A_DOMText";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "A_DOMText"
|
||||
}
|
||||
array(28) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
DOMXPath
|
||||
HipHop Warning: DOMXPath::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DOMXPath::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DOMXPath)#1 (0) {
|
||||
}
|
||||
string(19) "O:8:"DOMXPath":0:{}"
|
||||
object(DOMXPath)#2 (0) {
|
||||
string(92) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:8:"DOMXPath";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(8) "DOMXPath"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
@@ -25,15 +27,15 @@ array(8) {
|
||||
}
|
||||
================
|
||||
A_DOMXPath
|
||||
HipHop Warning: DOMXPath::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DOMXPath::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DOMXPath)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(35) "O:10:"A_DOMXPath":1:{s:4:"___x";N;}"
|
||||
object(A_DOMXPath)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"A_DOMXPath";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "A_DOMXPath"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
DateInterval
|
||||
HipHop Warning: DateInterval::__construct() expects exactly 1 parameter, 0 given in %s on line 5
|
||||
HipHop Warning: DateInterval::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DateInterval)#1 (0) {
|
||||
}
|
||||
string(24) "O:12:"DateInterval":0:{}"
|
||||
@@ -19,7 +19,7 @@ array(5) {
|
||||
}
|
||||
================
|
||||
A_DateInterval
|
||||
HipHop Warning: DateInterval::__construct() expects exactly 1 parameter, 0 given in %s on line 26
|
||||
HipHop Warning: DateInterval::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DateInterval)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
DateTimeZone
|
||||
HipHop Warning: DateTimeZone::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: DateTimeZone::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(DateTimeZone)#1 (0) {
|
||||
}
|
||||
string(24) "O:12:"DateTimeZone":0:{}"
|
||||
@@ -23,7 +23,7 @@ array(7) {
|
||||
}
|
||||
================
|
||||
A_DateTimeZone
|
||||
HipHop Warning: DateTimeZone::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: DateTimeZone::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_DateTimeZone)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
DebuggerClient
|
||||
object(DebuggerClient)#1 (0) {
|
||||
}
|
||||
string(26) "O:14:"DebuggerClient":0:{}"
|
||||
object(DebuggerClient)#2 (0) {
|
||||
string(99) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:14:"DebuggerClient";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(14) "DebuggerClient"
|
||||
}
|
||||
array(4) {
|
||||
[0]=>
|
||||
@@ -20,10 +22,10 @@ object(A_DebuggerClient)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(41) "O:16:"A_DebuggerClient":1:{s:4:"___x";N;}"
|
||||
object(A_DebuggerClient)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(101) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:16:"A_DebuggerClient";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(16) "A_DebuggerClient"
|
||||
}
|
||||
array(4) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
EncodingDetector
|
||||
object(EncodingDetector)#1 (0) {
|
||||
}
|
||||
string(28) "O:16:"EncodingDetector":0:{}"
|
||||
object(EncodingDetector)#2 (0) {
|
||||
string(101) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:16:"EncodingDetector";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(16) "EncodingDetector"
|
||||
}
|
||||
array(5) {
|
||||
[0]=>
|
||||
@@ -22,10 +24,10 @@ object(A_EncodingDetector)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(43) "O:18:"A_EncodingDetector":1:{s:4:"___x";N;}"
|
||||
object(A_EncodingDetector)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(103) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:18:"A_EncodingDetector";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(18) "A_EncodingDetector"
|
||||
}
|
||||
array(5) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
Memcache
|
||||
object(Memcache)#1 (0) {
|
||||
}
|
||||
string(19) "O:8:"Memcache":0:{}"
|
||||
object(Memcache)#2 (0) {
|
||||
string(92) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:8:"Memcache";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(8) "Memcache"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
@@ -54,10 +56,10 @@ object(A_Memcache)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(35) "O:10:"A_Memcache":1:{s:4:"___x";N;}"
|
||||
object(A_Memcache)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"A_Memcache";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "A_Memcache"
|
||||
}
|
||||
array(21) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
Memcached
|
||||
object(Memcached)#1 (0) {
|
||||
}
|
||||
string(20) "O:9:"Memcached":0:{}"
|
||||
object(Memcached)#2 (0) {
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"Memcached";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "Memcached"
|
||||
}
|
||||
array(38) {
|
||||
[0]=>
|
||||
@@ -88,10 +90,10 @@ object(A_Memcached)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(36) "O:11:"A_Memcached":1:{s:4:"___x";N;}"
|
||||
object(A_Memcached)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"A_Memcached";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "A_Memcached"
|
||||
}
|
||||
array(38) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
Normalizer
|
||||
object(Normalizer)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"Normalizer":0:{}"
|
||||
object(Normalizer)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"Normalizer";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "Normalizer"
|
||||
}
|
||||
array(3) {
|
||||
[0]=>
|
||||
@@ -18,10 +20,10 @@ object(A_Normalizer)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_Normalizer":1:{s:4:"___x";N;}"
|
||||
object(A_Normalizer)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_Normalizer";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_Normalizer"
|
||||
}
|
||||
array(3) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SQLite3
|
||||
HipHop Warning: SQLite3::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SQLite3::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SQLite3)#1 (0) {
|
||||
}
|
||||
string(18) "O:7:"SQLite3":0:{}"
|
||||
object(SQLite3)#2 (0) {
|
||||
string(91) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:7:"SQLite3";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(7) "SQLite3"
|
||||
}
|
||||
array(18) {
|
||||
[0]=>
|
||||
@@ -45,15 +47,15 @@ array(18) {
|
||||
}
|
||||
================
|
||||
A_SQLite3
|
||||
HipHop Warning: SQLite3::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SQLite3::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SQLite3)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(33) "O:9:"A_SQLite3":1:{s:4:"___x";N;}"
|
||||
object(A_SQLite3)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"A_SQLite3";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "A_SQLite3"
|
||||
}
|
||||
array(18) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SQLite3Stmt
|
||||
HipHop Warning: SQLite3Stmt::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SQLite3Stmt::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SQLite3Stmt)#1 (0) {
|
||||
}
|
||||
string(23) "O:11:"SQLite3Stmt":0:{}"
|
||||
object(SQLite3Stmt)#2 (0) {
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"SQLite3Stmt";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "SQLite3Stmt"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
@@ -25,15 +27,15 @@ array(8) {
|
||||
}
|
||||
================
|
||||
A_SQLite3Stmt
|
||||
HipHop Warning: SQLite3Stmt::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SQLite3Stmt::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SQLite3Stmt)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(38) "O:13:"A_SQLite3Stmt":1:{s:4:"___x";N;}"
|
||||
object(A_SQLite3Stmt)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(98) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:13:"A_SQLite3Stmt";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(13) "A_SQLite3Stmt"
|
||||
}
|
||||
array(8) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SimpleXMLElement
|
||||
HipHop Warning: SimpleXMLElement::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SimpleXMLElement::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SimpleXMLElement)#1 (0) {
|
||||
}
|
||||
string(28) "O:16:"SimpleXMLElement":0:{}"
|
||||
object(SimpleXMLElement)#2 (0) {
|
||||
string(101) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:16:"SimpleXMLElement";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(16) "SimpleXMLElement"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
@@ -53,11 +55,13 @@ array(22) {
|
||||
}
|
||||
================
|
||||
A_SimpleXMLElement
|
||||
HipHop Warning: SimpleXMLElement::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SimpleXMLElement::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SimpleXMLElement)#3 (0) {
|
||||
}
|
||||
string(30) "O:18:"A_SimpleXMLElement":0:{}"
|
||||
object(A_SimpleXMLElement)#4 (0) {
|
||||
string(103) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:18:"A_SimpleXMLElement";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(18) "A_SimpleXMLElement"
|
||||
}
|
||||
array(22) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
SimpleXMLElementIterator
|
||||
object(SimpleXMLElementIterator)#1 (0) {
|
||||
}
|
||||
string(36) "O:24:"SimpleXMLElementIterator":0:{}"
|
||||
object(SimpleXMLElementIterator)#2 (0) {
|
||||
string(109) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:24:"SimpleXMLElementIterator";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(24) "SimpleXMLElementIterator"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
@@ -24,10 +26,10 @@ object(A_SimpleXMLElementIterator)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(51) "O:26:"A_SimpleXMLElementIterator":1:{s:4:"___x";N;}"
|
||||
object(A_SimpleXMLElementIterator)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(111) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:26:"A_SimpleXMLElementIterator";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(26) "A_SimpleXMLElementIterator"
|
||||
}
|
||||
array(6) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SoapClient
|
||||
HipHop Warning: SoapClient::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SoapClient::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SoapClient)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"SoapClient":0:{}"
|
||||
object(SoapClient)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"SoapClient";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "SoapClient"
|
||||
}
|
||||
array(13) {
|
||||
[0]=>
|
||||
@@ -35,15 +37,15 @@ array(13) {
|
||||
}
|
||||
================
|
||||
A_SoapClient
|
||||
HipHop Warning: SoapClient::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SoapClient::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SoapClient)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_SoapClient":1:{s:4:"___x";N;}"
|
||||
object(A_SoapClient)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_SoapClient";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_SoapClient"
|
||||
}
|
||||
array(13) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SoapHeader
|
||||
HipHop Warning: SoapHeader::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SoapHeader::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SoapHeader)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"SoapHeader":0:{}"
|
||||
object(SoapHeader)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"SoapHeader";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "SoapHeader"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
@@ -11,15 +13,15 @@ array(1) {
|
||||
}
|
||||
================
|
||||
A_SoapHeader
|
||||
HipHop Warning: SoapHeader::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SoapHeader::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SoapHeader)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_SoapHeader":1:{s:4:"___x";N;}"
|
||||
object(A_SoapHeader)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_SoapHeader";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_SoapHeader"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SoapParam
|
||||
HipHop Warning: SoapParam::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SoapParam::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SoapParam)#1 (0) {
|
||||
}
|
||||
string(20) "O:9:"SoapParam":0:{}"
|
||||
object(SoapParam)#2 (0) {
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"SoapParam";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "SoapParam"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
@@ -11,15 +13,15 @@ array(1) {
|
||||
}
|
||||
================
|
||||
A_SoapParam
|
||||
HipHop Warning: SoapParam::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SoapParam::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SoapParam)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(36) "O:11:"A_SoapParam":1:{s:4:"___x";N;}"
|
||||
object(A_SoapParam)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"A_SoapParam";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "A_SoapParam"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SoapServer
|
||||
HipHop Warning: SoapServer::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SoapServer::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SoapServer)#1 (0) {
|
||||
}
|
||||
string(22) "O:10:"SoapServer":0:{}"
|
||||
object(SoapServer)#2 (0) {
|
||||
string(95) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:10:"SoapServer";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(10) "SoapServer"
|
||||
}
|
||||
array(9) {
|
||||
[0]=>
|
||||
@@ -27,15 +29,15 @@ array(9) {
|
||||
}
|
||||
================
|
||||
A_SoapServer
|
||||
HipHop Warning: SoapServer::__construct() expects exactly 1 parameter, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SoapServer::__construct() expects exactly 1 parameter, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SoapServer)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(37) "O:12:"A_SoapServer":1:{s:4:"___x";N;}"
|
||||
object(A_SoapServer)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(97) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:12:"A_SoapServer";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "A_SoapServer"
|
||||
}
|
||||
array(9) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
SoapVar
|
||||
HipHop Warning: SoapVar::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 5
|
||||
HipHop Warning: SoapVar::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 5
|
||||
object(SoapVar)#1 (0) {
|
||||
}
|
||||
string(18) "O:7:"SoapVar":0:{}"
|
||||
object(SoapVar)#2 (0) {
|
||||
string(91) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:7:"SoapVar";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(7) "SoapVar"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
@@ -11,15 +13,15 @@ array(1) {
|
||||
}
|
||||
================
|
||||
A_SoapVar
|
||||
HipHop Warning: SoapVar::__construct() expects exactly 2 parameters, 0 given in %s/hphp/test/quick/builtin_extensions.inc on line 26
|
||||
HipHop Warning: SoapVar::__construct() expects exactly 2 parameters, 0 given in %s/test/quick/builtin_extensions.inc on line 23
|
||||
object(A_SoapVar)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(33) "O:9:"A_SoapVar":1:{s:4:"___x";N;}"
|
||||
object(A_SoapVar)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"A_SoapVar";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "A_SoapVar"
|
||||
}
|
||||
array(1) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
XMLReader
|
||||
object(XMLReader)#1 (0) {
|
||||
}
|
||||
string(20) "O:9:"XMLReader":0:{}"
|
||||
object(XMLReader)#2 (0) {
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"XMLReader";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "XMLReader"
|
||||
}
|
||||
array(27) {
|
||||
[0]=>
|
||||
@@ -66,10 +68,10 @@ object(A_XMLReader)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(36) "O:11:"A_XMLReader":1:{s:4:"___x";N;}"
|
||||
object(A_XMLReader)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"A_XMLReader";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "A_XMLReader"
|
||||
}
|
||||
array(27) {
|
||||
[0]=>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
XMLWriter
|
||||
object(XMLWriter)#1 (0) {
|
||||
}
|
||||
string(20) "O:9:"XMLWriter":0:{}"
|
||||
object(XMLWriter)#2 (0) {
|
||||
string(93) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:9:"XMLWriter";}"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(9) "XMLWriter"
|
||||
}
|
||||
array(43) {
|
||||
[0]=>
|
||||
@@ -98,10 +100,10 @@ object(A_XMLWriter)#3 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
}
|
||||
string(36) "O:11:"A_XMLWriter":1:{s:4:"___x";N;}"
|
||||
object(A_XMLWriter)#4 (1) {
|
||||
["___x"]=>
|
||||
NULL
|
||||
string(96) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:11:"A_XMLWriter";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(11) "A_XMLWriter"
|
||||
}
|
||||
array(43) {
|
||||
[0]=>
|
||||
|
||||
@@ -4,15 +4,12 @@ function test($cls) {
|
||||
echo $cls . "\n";
|
||||
$a = new $cls;
|
||||
var_dump($a);
|
||||
if ($a instanceof Closure || $a instanceof Continuation) {
|
||||
continue;
|
||||
}
|
||||
// serialize and unserialize
|
||||
$b = serialize($a);
|
||||
var_dump($b);
|
||||
$c = unserialize($b);
|
||||
var_dump($c);
|
||||
if ($a != $c) {
|
||||
if (($a != $c) && (get_class($c) != "__PHP_Unserializable_Class")) {
|
||||
echo "bad serialization/deserialization\n";
|
||||
exit(1);
|
||||
}
|
||||
@@ -25,15 +22,12 @@ function test($cls) {
|
||||
echo $cls . "\n";
|
||||
$a = new $cls;
|
||||
var_dump($a);
|
||||
if ($a instanceof Closure || $a instanceof Continuation) {
|
||||
continue;
|
||||
}
|
||||
// serialize and unserialize
|
||||
$b = serialize($a);
|
||||
var_dump($b);
|
||||
$c = unserialize($b);
|
||||
var_dump($c);
|
||||
if ($a != $c) {
|
||||
if (($a != $c) && (get_class($c) != "__PHP_Unserializable_Class")) {
|
||||
echo "bad serialization/deserialization\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
@@ -1,2 +1 @@
|
||||
string(7) "Closure"
|
||||
string(12) "DummyClosure"
|
||||
|
||||
@@ -26,9 +26,15 @@ function main() {
|
||||
// each other's memory. We want to confirm that all fields are
|
||||
// initialized correctly and that the destructor does not segfault.
|
||||
$sewh = unserialize($s2);
|
||||
var_dump($sewh);
|
||||
$sewh = null; // Let it go
|
||||
$srwh = unserialize($s1);
|
||||
var_dump($srwh);
|
||||
$srwh = null; // Let it go
|
||||
|
||||
// Confirm that we can't deserialize one of these as well.
|
||||
$c1 = unserialize("O:12:\"Continuation\":0:{}");
|
||||
var_dump($c1);
|
||||
}
|
||||
|
||||
main();
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
int(42)
|
||||
string(3) "Hi!"
|
||||
string(34) "O:22:"StaticResultWaitHandle":0:{}"
|
||||
string(37) "O:25:"StaticExceptionWaitHandle":0:{}"
|
||||
string(107) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:22:"StaticResultWaitHandle";}"
|
||||
string(110) "O:26:"__PHP_Unserializable_Class":1:{s:31:"__PHP_Unserializable_Class_Name";s:25:"StaticExceptionWaitHandle";}"
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(25) "StaticExceptionWaitHandle"
|
||||
}
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(22) "StaticResultWaitHandle"
|
||||
}
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "Continuation"
|
||||
}
|
||||
|
||||
@@ -14,4 +14,4 @@ foreach ($x->cache_gen as $v) {
|
||||
}
|
||||
apc_store('key', $x);
|
||||
$y = apc_fetch('key');
|
||||
print_r($y->cache_gen);
|
||||
var_dump($y->cache_gen);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
string(1) "a"
|
||||
string(1) "b"
|
||||
DummyContinuation Object
|
||||
(
|
||||
)
|
||||
object(__PHP_Unserializable_Class)#4 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(12) "Continuation"
|
||||
}
|
||||
|
||||
@@ -7,5 +7,5 @@ $f = function($a) {
|
||||
var_dump($f('x'));
|
||||
apc_store('key', $f);
|
||||
$g = apc_fetch('key');
|
||||
print_r($g);
|
||||
var_dump($g);
|
||||
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
string(1) "x"
|
||||
DummyClosure Object
|
||||
(
|
||||
)
|
||||
@@ -0,0 +1,5 @@
|
||||
string(1) "x"
|
||||
object(__PHP_Unserializable_Class)#2 (1) {
|
||||
["__PHP_Unserializable_Class_Name"]=>
|
||||
string(42) "Closure$$%s$"
|
||||
}
|
||||
@@ -267,7 +267,7 @@ static void writeConstant(std::ostream& out, const PhpConst& cns) {
|
||||
}
|
||||
|
||||
#define CLASS_FLAG_MASK (IsAbstract|IsFinal|NoDefaultSweep|\
|
||||
HipHopSpecific|HasDocComment)
|
||||
HipHopSpecific|HasDocComment|IsCppSerializable)
|
||||
#define PROP_FLAG_MASK (IsProtected|IsPrivate|IsPublic|IsStatic)
|
||||
|
||||
static void writeClass(std::ostream& out, const PhpClass& cls) {
|
||||
|
||||
@@ -96,6 +96,7 @@ static const std::unordered_map<fbstring, FuncFlags> g_flagsMap =
|
||||
{"IsConstructor", IsConstructor},
|
||||
{"IsNothing", IsNothing},
|
||||
{"HasDocComment", HasDocComment},
|
||||
{"IsCppSerializable", IsCppSerializable},
|
||||
{"HipHopSpecific", HipHopSpecific},
|
||||
{"VariableArguments", VariableArguments},
|
||||
{"RefVariableArguments", RefVariableArguments},
|
||||
|
||||
@@ -44,6 +44,7 @@ enum FuncFlags {
|
||||
IsConstructor = (1 << 12),
|
||||
IsNothing = (1 << 13),
|
||||
HasDocComment = (1 << 14),
|
||||
IsCppSerializable = (1 << 15),
|
||||
HipHopSpecific = (1 << 16),
|
||||
VariableArguments = (1 << 17),
|
||||
RefVariableArguments = (1 << 18),
|
||||
|
||||
Referência em uma Nova Issue
Bloquear um usuário