#1 21. 3. 2010 23:00

honzakuchar
Moderator
Místo: Brno
Registrovaný: 12. 8. 2007
Příspěvky: 1330
Web

PgSQL a znak \x00 → oříznutí zbytku vstupu

Ahoj, když jsem potřeboval uložit do databáze serializovaný objekt, tak jsem narazil na zajímavý bug:

Zkustě si udělat toto:

// Driver postgre
Debug::dump(serialize(Environment::getCache()));
Dibi::test("INSERT INTO [test]",array(
        "test%s" => serialize(Environment::getCache())
));

Výstup:

string(290) "O:5:"Cache":4:{s:14:"\x00Cache\x00storage ... "

INSERT INTO "test" ("test")
VALUES ('O:5:"Cache":4:{s:14:"')

String se za znakem \x00 ořízne → při deserializaci samozřejmě výjimka. Workaround: použít ještě base64. Používám driver postgres. Dibi

const VERSION = '1.3-dev';
const REVISION = 'a8e83ce released on 2010-01-26';

Offline

 

#2 22. 3. 2010 16:43

paranoiq
Člen
Místo: Tábor
Registrovaný: 14. 11. 2006
Příspěvky: 188

Re: PgSQL a znak \x00 → oříznutí zbytku vstupu

nebylo by řešením použít v databázi místo stringu blob?


Z Javy do PHP nikdy nic dobrého nepřišlo. / http://twitter.com/paranoiq

Offline

 

#3 22. 3. 2010 18:39

honzakuchar
Moderator
Místo: Brno
Registrovaný: 12. 8. 2007
Příspěvky: 1330
Web

Re: PgSQL a znak \x00 → oříznutí zbytku vstupu

Při použití blobu to sice dibi přeloží správně, ale pak to stejně nejde unserializovat. :(

Offline

 

Zápatí