[pgsql-jp: 36857] Re: client encoding と PQexec

Tatsuo Ishii ishii @ sraoss.co.jp
2006年 3月 10日 (金) 12:34:22 JST


石井です.

>  一応 DBD::Pg も、7.2.x 以降の場合は libpq 側の PQescapeString を使う
> ようになっているようです。
> 
> # 前のメールでの DBD::Pg が自前で quote してる、というのはかなり古いサー
> # バ相手のみのようです。迂闊でした。
> 
>  今確認してみたのですが、7.4.12 の PQescapeString はバイト単位で単純
> に ' と \ をエスケープしているだけのようです。8.1.3 の PQescapeString
> はマクロを使ってシンプルに書き換えられていましたが、
> 
> ----- src/include/c.h
> #define SQL_STR_DOUBLE(ch)      ((ch) == '\'' || (ch) == '\\')
> 
> ----- src/interfaces/libpq/fe-exec.c
>         while (remaining > 0 && *source != '\0')
>         {
>                 if (SQL_STR_DOUBLE(*source))
>                         *target++ = *source;
>                 *target++ = *source++;
>                 remaining--;
>         }
> -----
> 
> となっていましたので、これも特に encoding を意識しているわけではなさそ
> うです。

そうなんですよ.これははっきり言うとバグに近いですね.正しくは,入力文
字列のエンコーディングを意識して,エスケープ処理を行うべきなのですが,
エンコーディング情報を渡す引数がないため,今のインターフェイスでは厳し
いです.
--
Tatsuo Ishii
SRA OSS, Inc. Japan



pgsql-jp メーリングリストの案内