CWE-369:Divide By Zero除數有可能為零缺陷是如何產生的?

zktq2021發表於2021-08-23

一、除數可能為零缺陷

01 什麼是除數有可能為零缺陷?

運算操作時,除法或求餘數操作容易受到除數有可能為零的影響。因此,必須在操作之前檢查除法運算或求餘數運算中的除數不為零。

根據除法的意義,除法是已知兩個因數的積與其中一個因數,求另一個因數的運算。利用除法與乘法的互逆關係可知,如果除數為零,則:當被除數不為零,由於“任何數乘零都等於零,而不可能等於不是零的數”,此時除法算式的商不存在——即任何數的零倍都不可能為非零數;當被除數為零,即除法算式零÷零,由於“任何數乘零都等於零”,於是商可以是任何數——即任何數的零倍都等於零。為了避免以上兩種情況,數學中規定“零不能做除數”。

02 為什麼會出現除數可能為零?

在運算過程中除法或求餘數操作時,當除數沒有經過測試就進行運算,就有可能為零。

二、除數為零造成影響及解決方法

03 除數有可能為零缺陷會造成哪些後果?

如果不驗證除數的輸入值不為零,那麼這將造成一個試圖除以零的異常。如果Java的異常處理沒有處理此錯誤,則可能發生意外的結果,甚至導致崩潰。

04 除數有可能為零缺陷的防範和修補方法有哪些?

出現以上情況,在不確定分母是否為0的情況下,需要先對分母進行判斷,以保證不存在除數為零的可能性。

三、除數有可能為零樣例展示:

05 除數有可能為零缺陷樣例 (Date類中的大部分方法都已經被Calendar類中的方法所取代):

 

用Wukong 悟空靜態程式碼安全檢測工具檢測上述程式程式碼,則可以發現程式碼中存在著“除數有可能為零” 導致的程式碼缺陷,如下圖:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70000012/viewspace-2788258/,如需轉載,請註明出處,否則將追究法律責任。

相關文章