[ruby-list:50722] Re: ENV / ARGV でNULL文字で終わってしまう
From:
Takahiro Kambe <taca@...>
Date:
2018-12-24 14:42:26 UTC
List:
ruby-list #50722
In message <69e9b6d34f923668447fa88545c8b984@reasonset.org>
on Mon, 24 Dec 2018 23:32:18 +0900,
haruka@reasonset.org wrote:
> 環境変数(ENV)または引数(ARGV)でNULL文字を含む文字列を渡すと、
> Ruby側ではNULL文字で終端したものとして扱われてしまいます。
「NULL文字」は nul文字 ('\0')のことと思いますが、UNIX系OSの場合は
execve(2)でプロセスを置き換える際に第3引数で文字列のポインタの配列とし
て渡します。
int execve(const char *path, char *const argv[], char *const envp[]);
置き換えられた後のプログラムでは、
int main(int argc, char *argv[], char *envp[]);
とmain関数の引数か、広域変数
extern char **environ;
として参照できます。envpやenvironの文字列ポインターの配列で参照してい
る文字列は'\0'で終端されたC言語の文字列ですので、そもそも途中に'\0'を
含めること自体できないと思いますが、如何でしょうか?
どうしても'\0'を含めたい場合は何かエンコードしておくしかないと思います。
--
神戸 隆博 / Takahiro Kambe