我用sonar.cxx插件在SonarCube的嵌入式C代碼上運行代碼分析。此函數不能正確處理非NULL終止的字符串
我也解析與sonarcube與Rough Auditing Tool for Security (RATS)生成的XML和我得到這個錯誤:
This function does not properly handle non-NULL terminated strings. This does not result in exploitable code, but can lead to access violations.
這是產生上述錯誤代碼:
if((machineMarket == NULL) || (strlen(machineMarket) > VALUE_MARKET_MAX_LEN))
這對最佳實踐處理非NULL終止的字符串?
使用'strnlen()'而不是'strlen()'?儘管我發現很難相信如果有辦法根本就不會得到非NULL終止的字符串,那麼這將徹底解決問題。 –
爲了迂迴,一個非空終止的'char'數組不是空字符串。對於更多的步驟,請注意'NULL'是空指針宏,而空終止符是'\ 0',有時被稱爲'NUL'。 –
@MichaelBurr在給定的最大長度超過可讀內存的情況下,仍然會導致訪問衝突。所以我真的沒有辦法以任何方式避免這種情況,除非正確地終止字符串。但也許它會使安全審計工具 –