none
nullexception在公司資安送檢時一直無法通過? RRS feed

  • 問題

  • 在這裡面,我在所有需加上null判斷的部分,都已經有加入進去,

    而需使用try catch(NullReferenceException)也都有加入,

    可是不知道為甚麼老是檢測出

    XXXX.cs中的方法XXXXX()可能會解除參照第XXX行的Null指標,
    因而產生NullExcpetion,

    在下方的範例 最後finally的

    f.Dispose(); 與b.Dispose();總是會被檢測道這問題。

    懇求大大們能指點小弟一條明路><

    發生資安有誤的範例:

    Font f = null;
    Brush b = null;

    try

    {

             for(int i=0;i<code.Length;i++)

               {

                            f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
                            b = new System.Drawing.SolidBrush(Colors[cindex]);  

               }

    }

    finally {
                        if (f != null)
                        {
                            f.Dispose();
                        }
                        if (b != null)
                        {
                            b.Dispose();
                        }
              }

    2012年4月23日 上午 02:54

解答

  • 使用f與b的部份,改用using{}試試看。

    如亂馬客所說,您的Dispose與new的部份,是在不同的生命週期範圍。

    要嘛把f跟b拉出迴圈外,try/catch/finally也在迴圈外使用。
    要嘛把try/catch/finally放進迴圈內。

    不過單就Dispose來說,用using來限定範圍,還是比較簡單與好維護的。


    授人以魚,三餐之需;授人以漁,終生之用。
    希望各位發問的朋友,得到的是如何釣魚的知識。之後也可以分享給別人,釣魚的知識。而不是肚子餓了,就上來討魚吃。

    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    • 已提議為解答 Pan01 2012年4月23日 上午 05:10
    • 已標示為解答 91MVP, Moderator 2012年4月23日 上午 10:54
    2012年4月23日 上午 04:14
    版主
  • 您好,

    請使用91大說的方式試一下,如下,

    前面宣告的f & b就不需要了! finally也不需要了!

    using (Font f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold))
    {
    	using (Brush b = new System.Drawing.SolidBrush(Colors[cindex]))
    	{
    		// your code....
    	}
    }


    以上說明若有錯誤請指教,謝謝。
    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/


    2012年4月23日 上午 05:29

所有回覆