Yappo::タワシ このページをアンテナに追加 RSSフィード

2011-10-19

さっそく Perl の規格上のバグ発見

私の唯一誇れる能力は、誤読である。そのため、私がプログラミング言語の規格を読むのを好むのは、自然なことである。このたび、 Perl の規格上のバグ発見した。なかなか笑えるので紹介する。もちろん、実装者にとっては洒落にならないが。

以下のコードは、現行ドラフトの文面に従うと、well-formedな Perl コードである

package main {
 a: { last a ; }
 b: { next b ; }
}

なぜかというと、現行の Perlドラフト規格は、ラベル付きの last 文と next 文は、 labe l文の中に入ることができるとされている。ラベル文には、文を書ける。また、ブロック文も文である。よって、 Label : { } は well-formed な Dart コードであり、その中で lastnext を使うのも well-formed である・・・はずだ。((あまりにも馬鹿馬鹿しすぎるからマジレスすると、 Perlブロックは一度だけ実行されるループ文と等価なんでこんな事が出来る(see perldoc -f next, perldoc -f last)))

傑作だったのは、現行の実装が、このコードを実際にコンパイルできてしまうということだ。 last 文の方は、期待通りに動いた。つまり

 a: { print("before") ; last a ; print("after") ; }

は、beforeを出力する。

next 文の方は、コンパイルは通るが、実行時に、beforeを吐いて強制終了してしまう。もし規格通りに動いていたならば、無限ループになったはずだ。

この件をバグ報告する馬鹿にみえたか?

参考文献: http://twitter.com/__gfx__/status/126454338947268608

Perl で誤って無限ループに陥るコード

Perl は非常にシンプル言語であるが、恐らく初心者が、誤って無限ループに陥ると思われる箇所がいくつかある。

オブジェクトコンストラクター

package X {
    sub new { new X() } # 無限ループ                                                                                                  
}
package main {
    my $x = new X();
}

このコードは、無限ループに陥る。なぜならば、new X()というのは、オブジェクトコンストラクターXを呼び出す式である。これは、つまり自分自身を再帰呼び出ししていることになる。結果として、無限ループになる。

クラスゲッターセッター

クラスゲッターセッターは、クラス変数への簡単な読み書きを提供するための特殊なメソッドである。これは、明示的に生成する。

サブクラスでは、この暗黙のゲッターセッターをオーバーライドすることができる。つまりゲッターセッターで、なにか複雑な処理を行うこともできるのだ。

package X {
    sub val {}
}
package Y {
    use parent 'X';
    sub val { my $self = shift; $self->val; } # 無限ループ                                                                            
}

これは無限ループとなる。なぜか。考えてみて欲しい、クラスYのスコープにおけるvalとは何なのか。それは、もちろんYのスコープで宣言されているvalである。つまり、Yのゲッター関数valということになる。これは、自分自身の再帰呼び出しである。つまり無限ループになる。

参考文献: http://cpplover.blogspot.com/2011/10/dart_19.html

2011-09-05

ネットなんとかのエースエンジニアのyosukehasegawaさんへの私信

http://d.hatena.ne.jp/hasegawayosuke/20110819/p1

ここから送信しようとしたら、長文すぎて駄目だったようなのでこちらに書く。

yosukehasegawaさんへ。

セキュリティを極めるにはOS開発者になるのが一番だと思います。

ネットなんとかみたいなぬるま湯にいても、結局XSSがうまくなるだけでしょ。

あなた冒険しようとしてネットなんとかに入った。しかし今や権力にあぐらをかいている。

XSS発見あなたにとって時間無駄しかありません。OS開発者にならなければ、はっきり言って逃げです。ダサいです。

セキュリティ世界をあっと言わせようよ。君になら出来るよ!

ネットなんとかで安定した収入を得て満足ですか。結婚して守りに入ったんですか。それはハッカーと言えるんですか?まるで官僚じゃないか

もっと攻めてけよ。人生を。

サニタイズの時代は終わったよ。

やっちゃえよ、OSひろみちゅの代わりに世界を変えちゃいなよ。

2011-06-07

web という側面で捉えた OS X Lion

どやがおでフルスクリーン対応を自慢してることで有名なOS X Lion ですがちょっとかいてみるよ。

フルスクリーンウェブページ

アプリケーション開発者が自由にSafariフルスクリーン表示できるようになるための JavaScript API が追加されるらしい。

会社ネットサーフィンしてたら唐突エロ画像フルスクリーンで表示される事件が多発するかな?

オーバーレイ表示されるスクロールバー

実質的スクロールバーが無くなってしまうので、スクロールバーがある事を前提にCSS組んでた人が阿鼻叫喚しそう。

メディアキャッシュ

あとでかく

サンドボックス

あとでかく

まとめ

どやがおで250の新機能の中に

チェスフルスクリーン

チェスフルスクリーンに表示させれば、あなたMacチェスボードに変身します。

があってモヒートふいたw