OpenPNE 2.10.0 管理画面のCMD管理のSQLにバグ
管理者用の画面にCMD管理画面があるが、そこのSQLにバグがある。
一応動作的には致命的だとかいうわけではなく、表示的な問題といえる。
まぁOpenPNEのバグ管理ならメジャー扱いがふさわしいのではないかと思う。
ちなみにOpenPNEに報告はしているけど、週末なのでまだtracに報告はされていない。
修正方法としては、 webapp\modules\admin\lib\db_admin.phpの2545行目を開く
バグの原因としては、 WHERE 句の IN の中に列挙しているCMD 名が二重引用符で囲まれているからということになる。
修正した方は単一引用符で囲むようにしているだけ。
標準SQLでは、文字列は単一引用符でも二重引用符でもOKということになっているようだけど、
PostgreSQLでは単一引用符のみで、二重引用符はDB名やテーブル名、カラム名として解釈される。
MySQLは両対応なので、PostgreSQL版固有のバグということになる。
上記の修正は、MySQL版でも問題にならないはずなので、提案しておいた。
この修正を施していない場合、CMDを使用しないに設定しても、管理画面での表示上は表示するになってしまう。
上記部分は、CMDの使用状況を取得するSQLなので、ここでエラーがでると取得できずに使用する状態として判定されてしまうからだ。
実際にCMDが使用不可になっているのかどうかは確認していないが、この部分は管理画面用の処理のようなので、実際には使えないのではないかと思われる
一応動作的には致命的だとかいうわけではなく、表示的な問題といえる。
まぁOpenPNEのバグ管理ならメジャー扱いがふさわしいのではないかと思う。
ちなみにOpenPNEに報告はしているけど、週末なのでまだtracに報告はされていない。
修正方法としては、 webapp\modules\admin\lib\db_admin.phpの2545行目を開く
$sql = 'SELECT * FROM c_cmd WHERE name IN ("' . implode('","', $names) . '")';この部分の以下のように書き換える。$sql = "SELECT * FROM c_cmd WHERE name IN ('" . implode("','", $names) . "')";これだけです。バグの原因としては、 WHERE 句の IN の中に列挙しているCMD 名が二重引用符で囲まれているからということになる。
修正した方は単一引用符で囲むようにしているだけ。
標準SQLでは、文字列は単一引用符でも二重引用符でもOKということになっているようだけど、
PostgreSQLでは単一引用符のみで、二重引用符はDB名やテーブル名、カラム名として解釈される。
MySQLは両対応なので、PostgreSQL版固有のバグということになる。
上記の修正は、MySQL版でも問題にならないはずなので、提案しておいた。
この修正を施していない場合、CMDを使用しないに設定しても、管理画面での表示上は表示するになってしまう。
上記部分は、CMDの使用状況を取得するSQLなので、ここでエラーがでると取得できずに使用する状態として判定されてしまうからだ。
実際にCMDが使用不可になっているのかどうかは確認していないが、この部分は管理画面用の処理のようなので、実際には使えないのではないかと思われる
カテゴリ:
OpenPNE
,
PHP
,
PostgreSQL
トラックバック
このブログ記事に対するトラックバックURL
http://fakelife.info/mt/system/mt-tb.cgi/52
コメントする