[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 

In This Thread