PHP  
 PHP_5_6
downloads | QA | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | my php.net 
 

Valgrind Report for Zend/tests/bug64896.phpt ('Bug #64896 (Segfault with gc_collect_cycles using unserialize on certain objects)')

Script

1: <?php
2: $bar 
NULL;
3: class 
bad
4:
{
5:     private 
$_private = array();
6:
7:     public function 
__construct()
8:     {
9:         
$this->_private[] = 'php';
10:     }
11:
12:     public function 
__destruct()
13:     {
14:         global 
$bar;
15:         
$bar $this;
16:     }
17: }
18:
19:
$foo = new stdclass;
20:
$foo->foo $foo;
21:
$foo->bad = new bad;
22:
23:
gc_disable();
24:
25:
unserialize(serialize($foo));
26:
gc_collect_cycles();
27:
var_dump($bar); 
28:
/*  will output:
29: object(bad)#4 (1) {
30:   ["_private":"bad":private]=>
31:   &UNKNOWN:0
32: }
33: */
34:
?>
35:

Report

==3503== Invalid read of size 1
==3503==    at 0xC4FAB9: php_var_dump (var.c:99)
==3503==    by 0xC4FA29: php_object_property_dump (var.c:82)
==3503==    by 0xE87345: zend_hash_apply_with_arguments (zend_hash.c:701)
==3503==    by 0xC503A6: php_var_dump (var.c:146)
==3503==    by 0xC506B8: zif_var_dump (var.c:183)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==  Address 0x153c31d4 is 20 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 1
==3503==    at 0xC4FBAC: zval_isref_p (zend.h:415)
==3503==    by 0xC4FBAC: php_var_dump (var.c:104)
==3503==    by 0xC4FA29: php_object_property_dump (var.c:82)
==3503==    by 0xE87345: zend_hash_apply_with_arguments (zend_hash.c:701)
==3503==    by 0xC503A6: php_var_dump (var.c:146)
==3503==    by 0xC506B8: zif_var_dump (var.c:183)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==  Address 0x153c31d5 is 21 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 4
==3503==    at 0xE470DB: zval_delref_p (zend.h:411)
==3503==    by 0xE470DB: i_zval_ptr_dtor (zend_execute.h:76)
==3503==    by 0xE470DB: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d0 is 16 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid write of size 4
==3503==    at 0xE470E5: zval_delref_p (zend.h:411)
==3503==    by 0xE470E5: i_zval_ptr_dtor (zend_execute.h:76)
==3503==    by 0xE470E5: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d0 is 16 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 4
==3503==    at 0xE470EC: zval_delref_p (zend.h:411)
==3503==    by 0xE470EC: i_zval_ptr_dtor (zend_execute.h:76)
==3503==    by 0xE470EC: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d0 is 16 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 4
==3503==    at 0xE471D1: zval_refcount_p (zend.h:399)
==3503==    by 0xE471D1: i_zval_ptr_dtor (zend_execute.h:82)
==3503==    by 0xE471D1: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d0 is 16 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid write of size 1
==3503==    at 0xE471E5: zval_unset_isref_p (zend.h:423)
==3503==    by 0xE471E5: i_zval_ptr_dtor (zend_execute.h:83)
==3503==    by 0xE471E5: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d5 is 21 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 1
==3503==    at 0xE47207: gc_zval_check_possible_root (zend_gc.h:182)
==3503==    by 0xE47207: i_zval_ptr_dtor (zend_execute.h:86)
==3503==    by 0xE47207: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d4 is 20 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 
==3503== Invalid read of size 1
==3503==    at 0xE47225: gc_zval_check_possible_root (zend_gc.h:182)
==3503==    by 0xE47225: i_zval_ptr_dtor (zend_execute.h:86)
==3503==    by 0xE47225: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE86959: zend_hash_destroy (zend_hash.c:548)
==3503==    by 0xEBB278: zend_object_std_dtor (zend_objects.c:44)
==3503==    by 0xEBB9DC: zend_objects_free_object_storage (zend_objects.c:137)
==3503==    by 0xECAEFA: zend_objects_store_del_ref_by_handle_ex (zend_objects_API.c:226)
==3503==    by 0xECAA94: zend_objects_store_del_ref (zend_objects_API.c:178)
==3503==    by 0xE66BFF: _zval_dtor_func (zend_variables.c:57)
==3503==    by 0xE4717D: _zval_dtor (zend_variables.h:35)
==3503==    by 0xE4717D: i_zval_ptr_dtor (zend_execute.h:79)
==3503==    by 0xE4717D: _zval_ptr_dtor (zend_execute_API.c:424)
==3503==    by 0xE841B8: i_zend_hash_bucket_delete (zend_hash.c:182)
==3503==    by 0xE841B8: zend_hash_bucket_delete (zend_hash.c:192)
==3503==    by 0xE87578: zend_hash_reverse_apply (zend_hash.c:733)
==3503==    by 0xE46274: shutdown_destructors (zend_execute_API.c:214)
==3503==    by 0xE6A4C2: zend_call_destructors (zend.c:944)
==3503==  Address 0x153c31d4 is 20 bytes inside a block of size 32 free'd
==3503==    at 0x4C27C24: free (vg_replace_malloc.c:473)
==3503==    by 0xE160C4: _efree (zend_alloc.c:2437)
==3503==    by 0xEADE32: gc_collect_cycles (zend_gc.c:851)
==3503==    by 0xE8C7BE: zif_gc_collect_cycles (zend_builtin_functions.c:361)
==3503==    by 0xED8D88: zend_do_fcall_common_helper_SPEC (zend_vm_execute.h:558)
==3503==    by 0xEE48FD: ZEND_DO_FCALL_SPEC_CONST_HANDLER (zend_vm_execute.h:2599)
==3503==    by 0xED680E: execute_ex (zend_vm_execute.h:363)
==3503==    by 0xED73B1: zend_execute (zend_vm_execute.h:388)
==3503==    by 0xE6C193: zend_execute_scripts (zend.c:1341)
==3503==    by 0xD8A607: php_execute_script (main.c:2597)
==3503==    by 0x1023A4A: do_cli (php_cli.c:994)
==3503==    by 0x10251F7: main (php_cli.c:1378)
==3503== 

 

Generated at Fri, 27 Mar 2015 03:26:43 +0000 (4 days ago)

Copyright © 2005-2015 The PHP Group
All rights reserved.