diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 324e9fb..b44d27b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -62,6 +62,20 @@ jobs: echo "::endgroup::" done + package-xml: + name: "package.xml version" + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v7 + + - name: Check that package.xml matches PHP_DEEPCLONE_VERSION + run: | + header=$(sed -n 's/^#define PHP_DEEPCLONE_VERSION "\(.*\)"$/\1/p' php_deepclone.h) + release=$(sed -n '0,//s/.*\(.*\)<\/release>.*/\1/p' package.xml) + echo "php_deepclone.h: $header, package.xml: $release" + test -n "$header" && test "$header" = "$release" + asan: name: "Linux 8.4 NTS + ASAN/UBSAN" runs-on: ubuntu-latest diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..64d5922 --- /dev/null +++ b/package.xml @@ -0,0 +1,70 @@ + + + deepclone + pecl.php.net + Deep-clone any serializable PHP value as a pure array payload + This extension deep-clones any serializable PHP value, faster and with less memory than unserialize(serialize()): strings and arrays keep their copy-on-write semantics. It turns the value into a payload made of scalars and nested arrays only, and back. That is the format of Symfony's DeepCloner, which uses the extension when it is loaded and its polyfill otherwise. + + Nicolas Grekas + nicolas-grekas + p@tchwork.com + yes + + 2026-10-07 + + + 0.8.8 + 0.8.8 + + + beta + beta + + MIT + +Fixed: deepclone_to_array() separates the storage that ArrayObject and ArrayIterator return from __serialize(), as these classes write to it in place: changing such an object after the call changed the payload too. See CHANGELOG.md for details. + + + + + + + + + + + + + + + + + + 8.2.0 + + + 1.4.8 + + + + deepclone + + + + 2026-10-07 + + + 0.8.8 + 0.8.8 + + + beta + beta + + MIT + +See CHANGELOG.md + + + +