]> granicus.if.org Git - php/commitdiff
Deny serialization of finfo objects
authorNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Oct 2020 15:54:30 +0000 (16:54 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 26 Oct 2020 15:54:30 +0000 (16:54 +0100)
The resulting objects were already unusable, make it error out
earlier.

ext/fileinfo/fileinfo.c
ext/fileinfo/tests/clone_serialize.phpt

index 3e05913ec291d1f3530b324ee8d6c5367f51ee7a..add971b6d643cb8fa21151da563773dda9ce2c1b 100644 (file)
@@ -35,6 +35,7 @@
 #include "fileinfo_arginfo.h"
 #include "fopen_wrappers.h" /* needed for is_url */
 #include "Zend/zend_exceptions.h"
+#include "Zend/zend_interfaces.h"
 
 /* {{{ macros and type definitions */
 typedef struct _php_fileinfo {
@@ -132,8 +133,10 @@ PHP_MINIT_FUNCTION(finfo)
 {
        zend_class_entry _finfo_class_entry;
        INIT_CLASS_ENTRY(_finfo_class_entry, "finfo", class_finfo_methods);
-       _finfo_class_entry.create_object = finfo_objects_new;
        finfo_class_entry = zend_register_internal_class(&_finfo_class_entry);
+       finfo_class_entry->create_object = finfo_objects_new;
+       finfo_class_entry->serialize = zend_class_serialize_deny;
+       finfo_class_entry->unserialize = zend_class_unserialize_deny;
 
        /* copy the standard object handlers to you handler table */
        memcpy(&finfo_object_handlers, &std_object_handlers, sizeof(zend_object_handlers));
index dec16a485e8c92c487f7f9761230d61d684912bb..a249819796b6523397bc6bf51e2558504a479055 100644 (file)
@@ -14,7 +14,7 @@ try {
 try {
     $finfo3 = unserialize(serialize($finfo));
     var_dump($finfo3->buffer("Test string"));
-} catch (Error $e) {
+} catch (Exception $e) {
     echo $e->getMessage(), "\n";
 }
 
@@ -22,4 +22,4 @@ try {
 --EXPECTF--
 string(%d) "%s"
 Trying to clone an uncloneable object of class finfo
-Invalid finfo object
+Serialization of 'finfo' is not allowed