トップページ > プログラム > 2014年11月21日 > zygDXSz1

書き込み順位&時間帯一覧

4 位/244 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000330000020008



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Perlについての質問箱 63箱目
クロージャって何がいいの? [転載禁止]©2ch.net
[転載禁止] 生産性が低いC++で頑張るために必要な知識©2ch.net

書き込みレス一覧

Perlについての質問箱 63箱目
857 :デフォルトの名無しさん[sage]:2014/11/21(金) 13:00:33.65 ID:zygDXSz1
>>856
これで気づかないっていう人はいいね。
潜在的なバグが発現したことがないってことだ。相当運がいいよ。

いきなり答えを言うのもなんかつまらないので
まずはヒントを。

>>853のコードを実行すると、paramの仕様によっては
%aの中身は以下のようになることがあるんだ。

%a = (
  key1 => 1,
  key2 => [1, 2],
  key3 => 3,
  4 => 5,
  undef => "a",
   'ARRAY(0x217efc8)' => 1
  key4 =>
)

※ 最後キーはあるが値がないので、Reference found where even-sized list expectedの警告になる
クロージャって何がいいの? [転載禁止]©2ch.net
187 :デフォルトの名無しさん[sage]:2014/11/21(金) 13:13:28.47 ID:zygDXSz1
>>186
ご愁傷さまです。
[転載禁止] 生産性が低いC++で頑張るために必要な知識©2ch.net
96 :デフォルトの名無しさん[sage]:2014/11/21(金) 13:33:53.02 ID:zygDXSz1
君と一緒にねるねるねーるね
Perlについての質問箱 63箱目
860 :デフォルトの名無しさん[sage]:2014/11/21(金) 14:06:55.37 ID:zygDXSz1
コンテキストって凄いもののように思えるかもしれないけど、
実は単なる引数や名前変えることで代用できちゃう。


my $ret = foo(param1, param2);
→ foo('scalar', param1, param2);
→ foo(param1, param2);

my @ret = foo(param1, param2);
→ foo(list', param1, param2);
→ foo_multi(param1, param2);

こっちのほうがはるかにわかりやすい
Perlについての質問箱 63箱目
861 :デフォルトの名無しさん[sage]:2014/11/21(金) 14:13:31.65 ID:zygDXSz1
>>859
他人が作ったモジュールなら仕様を勘違いしていることがあるし、
チームで作っているのならなおさら。
仕様変更で複数の値が買えるようになることだってある。
それに戻ってくる値が一個だけならちゃんと動く。

つまりバグを起こしやすいって話をしている。

例えばこう書いていれば問題なく動く。

my $value1 = $self->param('name1');
my $value2 = $self->param('name2');
my $value3 = $self->param('name3');

my %a = (
  key1 => $value1
  key2 => $value2.
  key3 => $value3.
);

しかし、一旦テンポラリ変数に入れる必要ないじゃんと思って
直接参照するとバグになる。いや、たまたま値が一個しか帰らなければ
正しく動く。しかし複数の値が変えるとバグになる。

単なるエラーならまだいいが、インジェクション系のセキュリティホールになることだってある。
ユーザーがキーを上書きすることが可能だからだ。
Perlについての質問箱 63箱目
862 :デフォルトの名無しさん[sage]:2014/11/21(金) 14:18:59.72 ID:zygDXSz1
例えば、HTTPのヘッダは通常同じ名前のものが複数出てきたりしない。
だから1個だと勘違いしやすい。

そして入力した値を%aのような連想配列に入れるようなコードを書くと
ユーザーが任意のキーを作成することが可能になる。

HTTPのパラメータも同じ。
http://example.com?search=abc

searchは一個しか来ないとおもいきや複数渡せる。
http://example.com?search=abc&search=def

このように通常は一個しか来ないものに対して
複数送ることで最悪セキュリティホールになる。
Perlについての質問箱 63箱目
864 :デフォルトの名無しさん[sage]:2014/11/21(金) 20:40:06.64 ID:zygDXSz1
>>863
そんなことは知ってる

その仕様がバグの元だと言ってる。
Perlについての質問箱 63箱目
865 :デフォルトの名無しさん[sage]:2014/11/21(金) 20:40:55.90 ID:zygDXSz1
バグの元である上に、大したメリットがない。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。