[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 メーリングリストの案内