encode the return value ofg serializables as clob
authorMichael Wallner <mike@php.net>
Tue, 21 Dec 2021 07:56:15 +0000 (08:56 +0100)
committerMichael Wallner <mike@php.net>
Tue, 21 Dec 2021 07:56:15 +0000 (08:56 +0100)
strings are supposed to be UTF-8 and serialiables cannot return ion\LOB
objects

ion_private.h
tests/serialize/serializable.phpt

index 6743cc67f8889de868b0f22088196c56c2d48ed3..3f13897008e2b3732cd6fe5eccc32149c2b61375 100644 (file)
@@ -1378,7 +1378,7 @@ static inline void php_ion_serialize_object_iface(php_ion_serializer *ser, zend_
                ION_STRING is;
                ION_CHECK(ion_writer_add_annotation_symbol(ser->writer, &PHP_ION_SYMBOL_SERIALIZEABLE));
                ION_CHECK(ion_writer_add_annotation(ser->writer, ion_string_from_zend(&is, zobject->ce->name)));
-               ION_CHECK(ion_writer_write_string(ser->writer, ion_string_assign_cstr(&is, (char *) buf, len)));
+               ION_CHECK(ion_writer_write_clob(ser->writer, buf, len));
                efree(buf);
        } else if (!EG(exception)){
                zend_throw_exception_ex(spl_ce_UnexpectedValueException, IERR_INTERNAL_ERROR,
index efb9f27a1b8ab81e96e8567fd6d690397c2d67af..0a700de0cdfb4e937b7d7dc312095793ae49dc46 100644 (file)
@@ -59,7 +59,7 @@ Deprecated: test implements the Serializable interface, which is deprecated. Imp
 
 Deprecated: recursive implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in %sserialize/serializable.php on line %d
 
-[S::test::"foobar",r::1]
+[S::test::{{"foobar"}},r::1]
 array(2) refcount(2){
   [0]=>
   object(test)#%d (1) refcount(2){
@@ -83,7 +83,7 @@ object(recursive)#%d (2) {
     NULL
   }
 }
-S::recursive::"node:S::recursive::\"leaf\""
+S::recursive::{{"node:S::recursive::{{\"leaf\"}}"}}
 object(recursive)#%d (2) refcount(1){
   ["id":"recursive":private]=>
   string(4) "node" refcount(1)