【Nandoku3.2.6】半角スペース1個のみの名前空間 |
- 日時: 2010/04/18 09:06
- 名前: sai
- Nandoku 3.2.6 を使わせていただいております。
一つの不具合とその対処法を見つけましたのでご報告させていただきます。
意図しない現象は、難読化後のアプリケーションで、 半角スペース 1 個のみの名前空間を持つ型で逆シリアル化しようとすると発生します。
なぜか目的の型ではなく、System.IO.MemoryStream 型のインスタンスを取得してしまいます。 明示的に System.IO.MemoryStream 型を使っていなくても発生する現象なので、結構驚きます。
名前空間を含む型名から型定義を探し出す処理は内部メソッド内にあるため、 Reflector for .NET などで処理の過程を見ることはできません。
Nandoku において不具合が出るのは、 命名方法で「括弧などの特殊記号で構成された名前変換を行います」か 「空白文字に名前変換を行います」を設定し、名前空間を難読化した場合です。
どちらも 0 個目の名前空間が半角スペース 1 個のみになるため、 これを名前空間に持つ型で逆シリアル化しようとすると不具合が発生します。 他の命名方法、たとえば数字のみの名前空間ではこの不具合は発生しません。
型名やメンバ名は、プロパティアクセサなどの特殊名でない限り、 半角スペース 1 個のみでも、他のどんな文字列でも問題はないようです。
この不具合を解消する案の一つとして、難読化する名前空間を、 0 個目からではなく 1 個目からカウントするようにすることが考えられます。
逆シリアル化が関わる以下のメソッドで確認致しました。 .NET Framework 2.0, 3.5 System.AppDomain.CreateInstanceFromAndUnwrap(string, string) System.Windows.Forms.IDataObject.GetData(string)
|
|