Package: php-horde-imp
Version: 6.2.27-2

Sorry if I can't point when this problem was introduced but I generally don't read email via the web interface and there was a configuration problem with horde syslogd that was hiding the problem.

HORDE[3673]: [imp] TypeError: Return value of Horde_Imap_Client_Data_Acl::offsetGet() must be an instance of mixed, bool returned in /usr/share/php/Horde/Imap/Client/Data/Acl.php:112

This time mixed is clearly an error since in_array ALWAYS return a bool

line 110 should be

public function offsetGet($offset): bool

fixing that another error came up trying to read any folder content

HORDE[4304]: [imp] TypeError: Return value of Horde_Imap_Client_Fetch_Query::offsetGet() must be an instance of mixed, array returned in /usr/share/php/Horde/Imap/Client/Fetch/Query.php:316

This time it's hard to decide s I just went for the quick route of removing the type hint at line 312

 public function offsetGet($offset)

but then I got

HORDE[3671]: [imp] TypeError: Return value of Horde_Imap_Client_Ids::key() must be an instance of mixed, int returned in /usr/share/php/Horde/Imap/Client/Ids.php:404

so I changed line 400 to

public function key(): int

this seems to work but I'm not sure if php consider null an int

and again

HORDE[558]: [imp] TypeError: Return value of Horde_Imap_Client_Ids::current() must be an instance of mixed, int returned in /usr/share/php/Horde/Imap/Client/Ids.php:395

fixed at 391 with

public function current(): int

but this too didn't stop the ordeal

HORDE[4304]: [imp] TypeError: Return value of Horde_Imap_Client_Ids::key() must be of the type int, null returned in /usr/share/php/Horde/Imap/Client/Ids.php:404

So... php doesn't consider null as int...

so line 400 changed to

public function key()

and I got this

HORDE: [imp] TypeError: Return value of Horde_Imap_Client_Fetch_Query::key() must be an instance of mixed, int returned in /usr/share/php/Horde/Imap/Client/Fetch/Query.php:359

and since key() can return int or null...

I went for killing the type hint at line 357

public function key()

that lead me to

HORDE[3673]: [imp] TypeError: Return value of Horde_Imap_Client_Fetch_Query::current() must be an instance of mixed, bool returned in /usr/share/php/Horde/Imap/Client/Fetch/Query.php:352

and since there is no easy way to guess what's going to be returned I killed the type hint at line 346

public function current()

that lead me to

HORDE[3669]: [imp] TypeError: Return value of Horde_Imap_Client_Fetch_Results::offsetGet() must be an instance of mixed, instance of Horde_Imap_Client_Data_Fetch returned in /usr/share/php/Horde/Imap/Client/Fetch/Results.php:146

and since again now I learnt that null is not equivalent to any type I killed the type hint at 142

public function offsetGet($offset)

And finally at this point I could read email through the webmail without errors.

I'm starting to be really confused about the use of those type hints and who and when they were added. Installing Horde from source seems to be a bit of a pain as well as putting Debian packaged version under version control to provide proper patches.

But if I had a better understanding on why and how those type hints were added I could try to provide better corrections. They are plaguing the whole source base and they look like they have been put at random. I do feel the pain of choosing the correct type hint considering the starting point of the source base, but sabotaging the program doesn't seem the proper way to improve the source code and making it ready to move to php 8.


thanks

--
Ivan Sergio Borgonovo
https://www.webthatworks.it https://www.borgonovo.net

Reply via email to