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