代碼審查九句真言_第1頁
代碼審查九句真言_第2頁
代碼審查九句真言_第3頁
代碼審查九句真言_第4頁
代碼審查九句真言_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、向配置文件發(fā)送消息進(jìn)行配置下載看見了If,就想Else??匆妋alloc,就去找Free。函數(shù)調(diào)用要小心,需要看看返回值??吹絝or循環(huán),就找邊界值??匆妑eturn要注意,要去前面找資源??匆姅?shù)組把神提,問題往往在下標(biāo)。不要小看字符串,長(zhǎng)度是個(gè)大問題。得到函數(shù)不要急,看看變量初始化,各種路徑要小心賦值函數(shù)最危險(xiǎn),變量沒有初始化。九句句真言不孤立,相互結(jié)合顯神威。真言詳解1.看見If,就想Else??吹絠f語句,就要想到else語句。如果沒有else語句,就要分析是不需要,還是異常情況沒有處理,如果是異常情況沒有處理,可以提單??匆?,就去找??吹絤alloc語句分配了內(nèi)存,立即停下正常走讀,看

2、malloc代碼之后,是否在所有程序的返回分支中都有釋放語句。典型案例:該函數(shù)有了,但沒有看到free。于是在下面的代碼中尋找,發(fā)現(xiàn)中自動(dòng)實(shí)現(xiàn)free功能。代碼看似沒有問題,但我們發(fā)現(xiàn)的返回值沒有判斷,如果返回失敗,free語句就沒有被執(zhí)行到。這樣可以確認(rèn)該函數(shù)存在內(nèi)存泄露隱患。該代碼最終修改:U32DEV_IfSetSectionEnable(DEV_IF_T*pIfIns)CHAR*pSectionName=NULL;ULONGulMsg4;ULONGrc;/*向配置文件發(fā)送消息DEV_IF_READ_SECTION,進(jìn)行配置下載*/if(pIfIns=NULL|(VOS_strlen(p

3、IfIns-ifName)(MAX_INTERFACE_NAME_LEN+1)returnDEV_ERR_GEN;pSectionName=VOS_Malloc(MOD_DEV,MAX_INTERFACE_NAME_LEN+1);if(pSectionName!=NULL)VOS_strcpy(pSectionName,pIfIns-ifName);ulMsg0=MID_DEV;ulMsg1=MID_CFM;ulMsg2=DEV_CFM_ENABLE_SECTION;ulMsg3=(ULONG)pSectionName;rc=VOS_Que_Write(ulVRPQID_CFM,ulMsg,V

4、OS_NO_WAIT,0);if(rc!=SUCCESS)rc=VOS_Free(pSectionName);VOS_DBGASSERT(rc=VOS_OK);returnDEV_ERR_GEN;returnSUCCESS;returnDEV_ERR_NOMEMORY;3.函數(shù)調(diào)用要小心,需要看看返回值。看到函數(shù)調(diào)用,要養(yǎng)成習(xí)慣,進(jìn)入函數(shù)內(nèi)部瞄一眼??纯春瘮?shù)的正常值和異常值都是什么??纯捶祷刂敌璨恍枰袛?。看看有沒有參數(shù)理解不一致的地方。例如:得*到端口的索引判*斷端口是否已經(jīng)存在函數(shù)使用-1作為非法值,而在函數(shù)中:接口的類型字符串字符串為空,返回錯(cuò)誤returnDEV_ERR_VALUE;從

5、字為空符串的尾部向前查找,直到找到第一個(gè)不是數(shù)字的字符字符不為等于空.,或數(shù)字為字符時(shí)循環(huán)結(jié)束函數(shù)的一個(gè)錯(cuò)誤返回值是dev_err_value,很顯然,兩邊參數(shù)理解不一致??吹窖h(huán),就找邊界值。看到for循環(huán),就要看看邊界值是否合理。如果循環(huán)變量是數(shù)組的下標(biāo),更加需要注意。例如:函數(shù)中:而數(shù)組:設(shè)備目前只管理物理端口和子接口而數(shù)組定義中,去掉被注釋掉的部分,數(shù)組長(zhǎng)度只有3。數(shù)組將嚴(yán)重越界。看見要注意,要去前面找資源??匆妑eturn語句,尤其是函數(shù)中間的異常返回語句??吹竭@種語句,就需要折回頭去看看前面有沒有分配資源。前面分配的任何資源(包括內(nèi)存,端口,等等),在異常返回處需要一并釋放。例如:

6、在中的函數(shù)中禁止設(shè)置紅色代碼處分配了資源,而在蘭色代碼處異常返回時(shí)沒有被釋放。看見數(shù)組把神提,問題往往在下標(biāo)。函數(shù)中一旦出現(xiàn)數(shù)組,就要提起精神。數(shù)組越界可是個(gè)致命問題。例如U32rc;U32i,j;/LoopVariableU8pOutputStr80;/outputinfobufferU32ulNetDEV_SLOT_ATMUNIT_MAX_NUM;U8*pOutputStatus;U8*pOutputType;U8*pOutputApcNetDEV_ASLT_SUB_MAX_NUM-1;U8xidx,yidx,tmpPort;U32ulNetVer;U32ulSeq;U32ulLen;vo

7、id*pData;/pointertomsgreceivedU8szBuf256;DEV_NET_SWPTMAP_TsNetSwptMap;/checknetboardnetIndex1=DEV_CONV_SLT2SLTINDEX(NET_CARD1);netIndex2=DEV_CONV_SLT2SLTINDEX(NET_CARD2);pNetIns1=DEV_GetSlotFromIndex(netIndex1);pNetIns2=DEV_GetSlotFromIndex(netIndex2);if(pNetIns1=NULL&pNetIns2=NULL)EXEC_OutString(ul

8、UserID,rnnetboardnotfound);returnSUCCESS;if(pNetIns1!=NULL)rc=DEV_SltGetSlotStatus(netIndex1,&sValue);if(rc)/erroroutputreturnDEV_ERR_GEN;if(sValue.v_num!=DEV_OBJ_STATUS_INACTIVE)netstatus1=DEV_OBJ_STATUS_ACTIVE;if(pNetIns2!=NULL)rc=DEV_SltGetSlotStatus(netIndex2,&sValue);if(rc)/erroroutputreturnDEV

9、_ERR_GEN;if(sValue.v_num!=DEV_OBJ_STATUS_INACTIVE)netstatus2=DEV_OBJ_STATUS_ACTIVE;if(netstatus1=DEV_OBJ_STATUS_INACTIVE&netstatus2=DEV_OBJ_STATUS_INACTIVE)EXEC_OutString(ulUserID,rnallthenetboardareinacitve);returnSUCCESS;/defaultframenumberis0frmIndex=DEV_CONV_FRM2FRMINDEX(DEV_DEFAULT_FRAME);每槽位最大

10、支持最大數(shù)單元數(shù)紅色代碼中:紅色數(shù)組定義的長(zhǎng)度是1蘭色代碼中:使用的下標(biāo)到了4,數(shù)組嚴(yán)重越界。不要小看字符串,長(zhǎng)度是個(gè)大問題。字符串往往是代碼審查中不被重視的問題。而字符串由于各個(gè)模塊對(duì)其他模塊的不了解,經(jīng)常出現(xiàn)隨便定義一個(gè)字符串長(zhǎng)度的現(xiàn)象。例如:接口的類型字符串字符串為空,返回錯(cuò)誤從字符串的尾部向前查找,直到找到第一個(gè)不是數(shù)字的字符字符不等于或數(shù)字字符時(shí)循環(huán)結(jié)束入口參數(shù)在調(diào)用方定義的長(zhǎng)度是8而的長(zhǎng)度是,因此,紅色代碼:有越界可能。得到函數(shù)不要急,看看變量初始化,各種路徑要小心。在拿到函數(shù)之后,要習(xí)慣性的看看所有的局部變量是在函數(shù)一開始就被初始化了如果有變量沒有被初始化,就要小心了。如果發(fā)現(xiàn)變量是在if,for,while,等語句中被初始化的,問題可能就來了。釋/放/原定時(shí)器申/請(qǐng)定時(shí)器向/源發(fā)出錯(cuò)應(yīng)答/啟/動(dòng)定時(shí)器如果代碼走紅色的分支,則在蘭色的代碼處使用的紅色的變量就沒有被初始化。賦值函數(shù)最危險(xiǎn),變量沒有初始化。在C代碼中,經(jīng)常使用將變量的指針作為參數(shù),在被調(diào)用函數(shù)中對(duì)變量進(jìn)行

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論