[kronolith] /usr/bin/kronolith-agenda Horde_Prefs_Scope::serialize() must return a string or NULL

Michael Menge michael.menge at zdv.uni-tuebingen.de
Mon Nov 2 22:29:42 UTC 2015


Quoting Samuel Wolf <samuel at sheepflock.de>:

> Zitat von Samuel Wolf <samuel at sheepflock.de>:
>
>> Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
>>
>>> Quoting Samuel Wolf <samuel at sheepflock.de>:
>>>
>>>> Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
>>>>
>>>>> Quoting Samuel Wolf <samuel at sheepflock.de>:
>>>>>
>>>>>> Zitat von Michael J Rubinsky <mrubinsk at horde.org>:
>>>>>>
>>>>>>> Quoting Samuel Wolf <samuel at sheepflock.de>:
>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> does somebody has any idea whats wrong here?
>>>>>>>>
>>>>>>>> Samuel
>>>>>>>>
>>>>>>>> root at mailserver:~# php5 /usr/bin/kronolith-agenda
>>>>>>>>
>>>>>>>> ====================
>>>>>>>>
>>>>>>>> Fatal Error:
>>>>>>>> Horde_Prefs_Scope::serialize() must return a string or NULL
>>>>>>>> In /usr/share/php/Horde/Prefs/Cache/HordeCache.php on line 62
>>>>>>>>
>>>>>>>> 1. send_agendas() /usr/bin/kronolith-agenda:22
>>>>>>>> 2. Horde_Prefs->getValue() /usr/bin/kronolith-agenda:100
>>>>>>>> 3. Horde_Prefs->_getScope() /usr/share/php/Horde/Prefs.php:250
>>>>>>>> 4. Horde_Prefs->_loadScope() /usr/share/php/Horde/Prefs.php:348
>>>>>>>> 5. Horde_Prefs_Cache_HordeCache->store()  
>>>>>>>> /usr/share/php/Horde/Prefs.php:418
>>>>>>>> 6. serialize() /usr/share/php/Horde/Prefs/Cache/HordeCache.php:62
>>>>>>>
>>>>>>>
>>>>>>> Looks like the serialization fails for some reason, and since  
>>>>>>> json_encode() returns FALSE for this it throws a fatal error  
>>>>>>> since the serialize interface must return a string or NULL.  
>>>>>>> *WHY* it's failing, I'm not sure off hand - I'll have to look  
>>>>>>> into it. At the very least, we need to catch the false value  
>>>>>>> and change it to null.
>>>>>>
>>>>>> It is not a general problem, the script work on my home horde  
>>>>>> server without a error.
>>>>>> Idea to debug this?
>>>>>>
>>>>>> I am sure this script work in the past without the error, but  
>>>>>> have no idea which change/update broke it...
>>>>>
>>>>> Basically, the only thing I know for sure is that json_decode()  
>>>>> is returning false in that method. I would need to see the data  
>>>>> that it is attempting to serialize to know *why* it is failing.  
>>>>> My guess is that it's some non UTF-8 data (which as of PHP 5.5  
>>>>> causes json_decode to fail whereas before this, it would only  
>>>>> null out the offending string).
>>>>>
>>>>> If you want to spend time on this, you can insert something like:
>>>>>
>>>>> Horde::debug(array($this->scope, $this->_prefs));
>>>>>
>>>>> into Horde_Prefs_Scope::serialize() and see what the values are  
>>>>> when this fails.
>>>>
>>>> I add the debug code in /usr/share/php/Horde/Pres/Scope.php
>>>>
>>>> public function serialize()
>>>>  {
>>>>      Horde::debug(array($this->scope, $this->_prefs));
>>>>      return json_encode(array(
>>>>          $this->scope,
>>>>          $this->_prefs
>>>>      ));
>>>>  }
>>>>
>>>> This produce a long debug log file, but I can not see a problem  
>>>> there. Something I can grep for?
>>>
>>> Was hoping there would be something obvious there in the data. So,  
>>> you got the error, but the data looked normal-ish? Maybe try a  
>>> Horde::debug(json_encode(array($this->scope, $this->_prefs)));  
>>> just to be sure the json_encode is failing on the call that you  
>>> are dumping...
>>
>> [...]
>>
>> Backtrace:
>> 1. send_agendas() /usr/bin/kronolith-agenda:22
>> 2. Horde_Prefs->getValue() /usr/bin/kronolith-agenda:85
>> 3. Horde_Prefs->_getScope() /usr/share/php/Horde/Prefs.php:250
>> 4. Horde_Prefs->_loadScope() /usr/share/php/Horde/Prefs.php:343
>> 5. Horde_Prefs_Cache_HordeCache->store() /usr/share/php/Horde/Prefs.php:418
>> 6. serialize() /usr/share/php/Horde/Prefs/Cache/HordeCache.php:62
>> 7. Horde_Prefs_Scope->serialize()
>> 8. Horde::debug() /usr/share/php/Horde/Prefs/Scope.php:311
>>
>> 2015-11-02T19:32:15+01:00 DEBUG: Variable information:
>> bool(false)
>>
>> Backtrace:
>> 1. send_agendas() /usr/bin/kronolith-agenda:22
>> 2. Horde_Prefs->getValue() /usr/bin/kronolith-agenda:100
>> 3. Horde_Prefs->_getScope() /usr/share/php/Horde/Prefs.php:250
>> 4. Horde_Prefs->_loadScope() /usr/share/php/Horde/Prefs.php:348
>> 5. Horde_Prefs_Cache_HordeCache->store() /usr/share/php/Horde/Prefs.php:418
>> 6. serialize() /usr/share/php/Horde/Prefs/Cache/HordeCache.php:62
>> 7. Horde_Prefs_Scope->serialize()
>> 8. Horde::debug() /usr/share/php/Horde/Prefs/Scope.php:311
>>
>> -----------------------------------------------------------------------
>>
>> It Should be "Standardidentität", is this the problem?
>>
>> [...] a:13:{s:2:"id";s:17:"Standardidentit<E4>t";s:8:"fullname"; [...]
>

It seems your datas is encoded in ISO-8859-1 or an other ISO-8859 charsets.
"ä" is charackter 228 = 0xE4 in ISO-8859-1. In UTF-8 0xE4 the begin of  
a 3 byte character
but not all byte esquences are valid.

ä is a 2 byte character (0xC3A4) in UTF-8. If you convert the date to  
UTF-8 you have to
adjust the string length (the number behind the s:) to the correct  
string length in bytes



> This was the problem, the profile was from an old user which never  
> login the past few years.
> After delete his settings in horde_prefs, the problem gone.
>


--------------------------------------------------------------------------------
M.Menge                                Tel.: (49) 7071/29-70316
Universität Tübingen                   Fax.: (49) 7071/29-5912
Zentrum für Datenverarbeitung          mail:  
michael.menge at zdv.uni-tuebingen.de
Wächterstraße 76
72074 Tübingen



More information about the kronolith mailing list