[PHP-users 27342] Re: safe_modeにおけるimagejpeg関数

Shu Sawada luna @ lunanet.gr.jp
2005年 11月 2日 (水) 20:13:47 JST


さわだと申します。
てきとーに眺めてただけなので、全然外してるかもしれませんが。

> 先日発表されたPHP4.4.1にバージョンアップしたところ、safe_mode=Onの場合、
> imagejpeg関数で画像をファイルに保存すると下のエラーが発生するように
> なってしまいました。
> 
> 「エラーメッセージ」
> PHP Warning:  imagejpeg(): Unable to access photopath/a.jpg in cgipath/xxx.cgi on line nnn
> PHP Warning:  imagejpeg(): Invalid filename 'photopath/a.jpg' in cgipath/xxx.cgi on line nnn

とりあえず4.3.11と4.4.1のソースでdiffを取ってみると、

diff ext/gd/gd.c /usr/local/src/php-4.3.11/ext/gd/gd.c

1647c1647
<               if (!fn || fn == empty_string ||
php_check_open_basedir(fn TSRMLS_CC) || (PG(safe_mode) &&
!php_checkuid(fn, "rb+", CHECKUID_CHECK_FILE_AND_DIR))) {
---
>               if (!fn || fn == empty_string ||
php_check_open_basedir(fn TSRMLS_CC)) {

あたりがそれっぽい感じですね。
cvs見ると、
 MFH: Added missing safe_mode checks.
って書いてある気がします。

んで、PHP5用のgd.cのcvs版を見ると、なにやらここら辺が修正されてる
みたいです。2005/11/01 17:05:09
http://cvs.php.net/diff.php/php-src/ext/gd/gd.c?r1=1.312.2.3&r2=1.312.2.4&ty=h

 MFH: - Added missing safe-mode checks
# Added by replacing the existing open_basedir checks with a macro
# Also, the filename passed might be null, etc. so it's not very good
# idea to pass to php_error_docref() (catch by Ilia)

1.312.2.1(PHP5.1)と1.221.2.56.2.1(PHP4.4)の修正は、ぱっと見同じ内容に
見えるので、頑張ってPHP4用のパッチを作れば改善するかもしれませんが。

cvs版のphp5で同じ事象が出ないなら、改善されてる気がします
でも、そこまでやるなら、とりあえずtouch()で逃げた方がラクですね(苦笑

とりとめなくて申し訳ないんですが、とりあえず4.4.1でgd関数にsafe_mode判定
が追加されたのではないでしょうか。
現状の動作がphpとして予定通りのものなのかどうかは、僕には判りません。

#このメールの内容はイマイチ自信ないので、眉唾で読んでください

-- 
Shu Sawada
http://luna.lunanet.gr.jp/


PHP-users メーリングリストの案内