[Armadillo:02966] Re: at-cgi の不具合

Yasushi SHOJI email@hidden
2008年 6月 7日 (土) 09:45:37 JST


At Tue, 15 Apr 2008 16:20:29 +0900,
河野貴之 wrote:
> 
> 河野と申します。
> 
> at-cgi内の下記のコードに不具合を見つけましたので、報告します。

ありがとうございます。

> int cgi_query_process( void ) 関数内の
> 
> cgi_decode_query();
> cgi_parse_query();
> 
> の呼び出し部分です。
> 
> cgi_decode_queryで、入力された'&'や'='を  %+16進文字コード からキャラクタに戻
> してしまうと、cgi_parse_queryで処理できなくなってしまいます。
> ご存知かもしれませんが、ご報告しておきます。

たしかにその通りですね。この問題は、単純にcgi_decode_query()を捨ててし
まうことで解決すると思うのですが、どうでしょうか? hex escapeを decode
したい場合は、parseし終った key/valueを、自前関数または glibにある 
g_uri_unescape_string()などでdecodeするのが良いと思いますが、どうですか?

あまり意味の無いpatchかもしれませんが、添付します。
-- 
           yashi

diff --git a/user/at-cgi/simple-cgi/simple-cgi.c b/user/at-cgi/simple-cgi/simple-cgi.c
index bcda034..f8229ef 100644
--- a/user/at-cgi/simple-cgi/simple-cgi.c
+++ b/user/at-cgi/simple-cgi/simple-cgi.c
@@ -96,35 +96,6 @@ static void cgi_parse_query(void)
 	cgi_query->pair_count = p_count;
 }
 
-static void cgi_decode_query(void)
-{
- 	char *src_c, *dst_c;
-  	int code;
-
-	if (!cgi_query) {
-		return;
-	}
-
-	src_c = cgi_query->query;
-
- 	for (dst_c = src_c; *src_c; src_c++) {
-
-		if (*src_c == '%') {
-			if (sscanf(src_c + 1, "%2x", &code) != 1) {
-				code = '?';
-			}
-			*dst_c++ = code;
-			src_c += 2;
-		} else if (*src_c == '+') {
-			*dst_c++ = ' ';
-		} else {
-			*dst_c++ = *src_c;
-		}
-
-	}
-	*dst_c = '\0';
-}
-
 int static set_query_from_post(int content_length)
 {
 	int read_in = 0, read_total = 0;
@@ -237,8 +208,6 @@ int cgi_query_process(void)
 
 	}
 
-	cgi_decode_query();
-
 	cgi_parse_query();
 
 	return 0;



armadillo メーリングリストの案内