KodiCMS-Kohana / cms

A new version of KodiCMS 14.0.0 with composer moved to the KodiCMS company.
https://github.com/KodiCMS/kodicms
131 stars 35 forks source link

Все вызовы serialize/unserialize имеют nul-byte и проблемны для хранения в базе данных. #291

Closed igk1972 closed 10 years ago

igk1972 commented 10 years ago

http://www.phpinternalsbook.com/classes_objects/serialization.html

Данная проблема не видна, так как используется mysql по-умолчанию, а там есть поддержка nul-byte (\0). При смене базы данных на sqlite (через PDO, но это отдельная тема), возникают оборваные данные serialize/unserialize.

Решание (возможно пока не элегантное): 1) Добавление в проект двух функций

function serialize_safe($data)
{
    return str_replace("\0", "~~NULL_BYTE~~", serialize($data));
}
function unserialize_safe($data)
{
    return unserialize(str_replace("~~NULL_BYTE~~", "\0", $data));
}

2) Замена всех вызовов serialize/unserialize на serialize_safe/unserialize_safe

Выполненно и проверенно - работает как прежде и как надо.

igk1972 commented 10 years ago

Вышеозначенное решение в какую ветку коммитить? В dev или sqlite?

butschster commented 10 years ago

давай пока sqlite, ты ее выложи, чтобы можно было посмотреть, и потом все вместе можно будет смерджить

igk1972 commented 10 years ago

Сделаю serialize_safe как отдельный коммит в sqlite, чтобы легко было.

igk1972 commented 10 years ago

Забирай коммит про seralize/unserialize https://github.com/igk1972/kodicms/commit/e6bd312887b61395cf305d0e3cfa1dc730e684d3