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

Ryuzo KOSAKI kosaki @ fip.fujitsu.com
2005年 11月 9日 (水) 14:53:25 JST


こさきです。この件、私の環境でも影響が出たので調べてみました。

"[PHP-users 27342] Re:safe_modeにおけるimagejpeg関数" の記事において 
luna @ lunanet.gr.jpさん は書きました。

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

判定が追加されたのは、仕様の追加ということで問題ないと思います。(推定)

しかしファイルが存在しないとエラーになるのは、単なるバグのようです。
根拠:
http://cvs.php.net/php-src/ext/gd/php_gd.h (1.59.2.2のコメント)
4.4.1の main/safe_mode.c 37行目付近と66行目付近

おそらく、4.4.1にこのパッチをあてれば大丈夫なはずです。
今のところ4.3.11にセキュリティパッチをあてた状態から、変更確認
する時間がないので、机上デバッグだけですが。

---------------------------------------------------------------
--- ext/gd/gd.c	Fri Oct  7 05:44:52 2005
+++ ext/gd/gd.c	Wed Nov  9 14:19:24 2005
@@ -1644,7 +1644,7 @@
 	}
 
 	if ((argc == 2) || (argc > 2 && Z_STRLEN_PP(file))) {
-		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) || (PG(safe_mode) && !php_checkuid(fn, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid filename '%s'", fn);
 			RETURN_FALSE;
 		}
--- ext/gd/gd_ctx.c	Fri Oct  7 05:44:52 2005
+++ ext/gd/gd_ctx.c	Wed Nov  9 14:19:47 2005
@@ -73,7 +73,7 @@
 	}
 
 	if ((argc == 2) || (argc > 2 && Z_STRLEN_PP(file))) {
-		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) || (PG(safe_mode) && !php_checkuid(fn, NULL, CHECKUID_CHECK_FILE_AND_DIR))) {
 			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid filename '%s'", fn);
 			RETURN_FALSE;
 		}
---------------------------------------------------------------


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