Debian LennyのパッケージとなっているSQLite 3.5.9でstrftime関数とsqlite3_mprintfの組み合わせでどうもバグを踏んだっぽい。
↓な感じのコードを書いたら、再現。
char str[] = "SELECT strftime('%%Y-%%m-%%d 00:00:00', '%u', 'unixepoch', 'localtime');" char *sql = sqlite3_mprintf(str, 1272628349);
そしたらこんなふうにsqlには文字列が展開されてた。
select strftime('%Y-No such file or directory--1076202408 00:00:00', '1272628349', 'unixepoch', 'localtime');
どうも%%のエスケープがうまく解釈出来ないようなので、strftimeを使用しない方法で回避した。
最新のSQLiteで治っているかは未確認。時間があったら調べる。
Comments are closed here.