程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WPF Bug清單之(3)——暗中創建文件的打開文件對話框

WPF Bug清單之(3)——暗中創建文件的打開文件對話框

編輯:關於.NET

這個Bug可以簡單描述為:在使用OpenFileDialog嘗試打開一個不存在的文件的時候,OpenFileDialog本身會創建這個不存在的文件並刪除它,然後告訴用戶這個文件不存在。

下面我們來寫個程序來重現這個Bug。基本原理是使用FileSystemWatcher來監視文件夾。

創建使用了如圖1所示的程序。

圖1. 示例程序

首先選擇一個文件夾,並監視裡面的文件改變。

圖2. 監視文件夾

然後在被監視的文件中嘗試打開一個不存在的文件。這個打開文件對話框已經設置CheckFileExists和CheckPathExists為true。

方法很簡單,只要在File Name中隨便輸入一個不存在的文件名,然後點打開就可以了。如圖3所示。

圖3. 打開不存在的文件

然後打開文件對話框“貌似”很乖地彈出了一個消息框,說文件不存在。如圖4。

圖4. 文件不存在消息框

然後我們點取消。但是,我們會發現後面的Output Message裡有了變化。如圖5所示。

圖5. 不合理的文件創建與刪除

由於打開文件對話框實際就是一個API調用。沒有像Reflactor一樣的簡單的方式去看它的實現。

而且在源代碼中,也加入了FileIOPermission來禁向監視文件中寫入。但是完全沒有效果。其實這也算是另一個安全漏洞。因為.NET Framework在調用API之前應該對相關Permission進行檢查。但是事實上沒有進行這樣的檢查。(也許MS有其它方面的考慮吧)

PS:WinForm中的打開文件對話框也有這樣的問題,所以也不能完全算WPF的BUG,但是畢竟在WPF的Assembly裡有這個問題,就放了進來。(沒有看代碼,應該是調用的一個API)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved