Links's archives

FlashPlayer10で外部swfのロードに失敗する件

by ginriki | 11 月 5th, 2008 

2008/10にFlashPlayer10が正式リリースされました。

Flashの動作に若干変更が加えられたようで、バイト先のWebサイトで今まで正常動作していたFlashがFlashPlayer10では動かないという問題が起きました。

挙動を調べてみると、MovieClipLoader.loadClipで外部swfのロードに失敗してます。

外部swfとして指定するURLは実際にはPHPファイルを指しており、GETパラメータを変えることで
PHPファイルが出力するswfデータが変わるようになってます。

どうも、PHPファイルがswfデータを出力する際に指定してるHTTPレスポンスヘッダが良くないようなので、調べてみるとContent-disposition 指定がswfロードに失敗する原因でした。

そこで、下記のようにContent-dispositionの指定をコメントアウトしたら、FlashPlayer10でも
外部swfのロードに成功しました。

PHP:
  1. <?php
  2.   //...略
  3.   // header("Content-disposition: attachment;filename=" . $filename);
  4.   header("Content-type: application/x-shockwave-flash");
  5.   header("Content-length: " . filesize($filepath));
  6.   readfile($filepath);
  7. ?>

Content-dispositionの仕様はRFCで規定されています。その内容については、こちらによくまとめられています。
以下、一部引用

Content-Disposition レスポンスヘッダフィールドは、ユーザがその内容を
ファイルに保存したい場合にオリジンサーバが既定のファイル名を提案する事を
意味するように勧告されている。

Adobe的には、Flashでロードするswfコンテンツに、ファイルを保存する場合に指定するフィールドを指定するなってことなんでしょうかねえ。

その他FlashPlayer10の問題

FlashPlayer10になって、バージョン番号が1桁から2桁に増えたため、
バージョンチェックを適当に行うJavascriptを書いているサイトなどでは、
FlashPlayer10をFlashPlayer1と勘違いして、Flashが表示されない問題が起きてるようです。
http://bakera.jp/ebi/topic/3302

・・・なんとなく2000年問題を思い出しました。

追記

Adobe公式のFlashPlayer10におけるセキュリティ上の変更点解説の中で、
Content-Disposition: attachment 指定されたswfに対する挙動を変えた理由が書いてありました。

不特定の人がファイルをアップロード/ダウンロードできるアップローダサイト等で、
信頼できないユーザによってアップロードされたswfが、そのサイトドメイン上で実行される危険性を
なくすためだそうです。

画像やxmlファイルなどは、Content-Disposition: attachmentがHTMLレスポンスヘッダに
ついていても、今までと同様に動作するそうです。

各種言語の文法

by ginriki | 9 月 11th, 2008 

以前のブログで各種言語の文法がBNFとかで書いてあるサイト群をメモりました。
でも、SQLのBNFリンクは入れてなかったことに最近気づいたので、改めてこちらに記事を作りなおしておきます。

C/C++, Java, COBOL, Prolog, SmallTalk
http://www.csci.csusb.edu/dick/samples/index.html
Python
http://www.python.jp/doc/2.3.5/ref/
Ruby
http://www.ruby-lang.org/ja/man/html/_B5BFBBF7BNF_A4CBA4E8A4EBRuby_A4CECAB8CBA1.html
PHP1
http://www.phpcompiler.org/doc/grammar.html
ECMAScript
http://tomcopeland.blogs.com/EcmaScript.html
Javascript
http://www.mozilla.org/js/language/grammar14.html
ActionScript
http://www.m2osw.com/en/action_script.html#grammar
C#
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
  • Annex A. Grammar参照
SQL
http://savage.net.au/SQL/

なお、正確な言語文法が知りたい方は、それぞれの言語仕様書を見た方が良いです。上記リンク先は、ある程度文法がわかればよい人向けです。

  1. PHPの場合、言語仕様では文法が決まってないそうです。リンク先は、有志の人がそれっぽく作った文法ということになります。 []

仕様書等のリンク集

by ginriki | 6 月 9th, 2007 

ソフトウェア実装の際、様々な仕様書を参考にすることがありますが、どんな仕様書がどこにあるのか忘れることがあるのでメモっておきます。

仕様書だけではなく、複数の仕様書について言及、比較をしている資料も挙げておきます。

オブジェクトファイルに関する仕様書等

  • Microsoft Portable Executable and Common Object File Format Specification: Windows上の実行可能ファイルとオブジェクトファイルに関する仕様書*1

http://www.microsoft.com/japan/whdc/system/platform/firmware/PECOFF.mspx

  • Tool Interface Standard (TIS) Portable Formats Specification: Linux/BSD系 OSの標準的なオブジェクトファイルであるELFに関する仕様書.そのほかにDwarf*2やOMFの仕様も書かれている

http://www.acm.uiuc.edu/sigops/rsrc/pfmt11.pdf

  • Introduction to Mach-O Programming Topics: Mac OS Xで使われるオブジェクトファイル形式Mach-Oを使ってプログラムを書く上で参考になるTopic集(Mach-Oの構造に関する記述含む)

http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachOTopics/introduction.html

OSが提供する機能やその機能を利用するアセンブラ、C言語、C標準関数に関する仕様書等

  • Manpage of STANDARDS: C と UNIX の標準規格を昔から現在の物まで列挙してあります。各規格の関係を把握するのに役立ちます。

http://www.linux.or.jp/JM/html/LDP_man-pages/man7/standards.7.html

  • Calling conventions for different C++ compilers and operating systems: コンパイラ、OSの違いに伴うC++の呼び出し規約の違いに関する記述が主ですが、OSによるcallee-save registerやcaller-save registerの違い等についても書かれているのでC++とは関係なく参考になります

http://www.agner.org/optimize/

  • The Single UNIX Specification Version 3: 現在、多くのOSが準拠していると思われるUNIX OSとCに関する仕様書

http://www.unix.org/single_unix_specification/

プログラミング言語に関する仕様書等

  • RubySpec: Rubyの仕様は文書化されていないのですが、それだと困るっていうんで有志の人がRubyマニュアルやCRubyの実装を元に仕様ぽい規定を収集したもの。直接CRubyの実装を読むよりは、ずっと楽です。

http://www.headius.com/rubyspec/index.php/Main_Page

  • Python Reference Manual: Pythonの文法や機能に関する仕様書

http://docs.python.org/ref/ref.html

*1:仕様書をpdfではなくdocファイルで提供するあたりがMicrosoft的だなあ・・・

*2:ELFとともによく使われるデバッグ情報の一種

ブログで紹介した商品

  • Image of デバッガの理論と実装 (ASCII SOFTWARE SCIENCE Language)