|
| |
|
|
| |
| 1.15 危险的程序 |
编程时,往往大家不考虑软件的脆弱性。何谓软件的脆弱性?简单的说,是衡量一个软件在任何情况下,是否能安全运行的指标。
如何使软件变得非常的强壮,最基本的思想是,“任何软件在任何情况下,不能因为某些不正常的因素而死掉”。不正常因素,可以是,内存被破坏,没有返回值等等。以下是一段程序,大家可以先看看,这里有什么问题。
tab = upnp_cd_info[Hnd].serviceTable;
while( tab != NULL )
{
if( ( 0 == upnp_strcmp( DevID, tab->devId ) )
&& ( 0 == upnp_strcmp( ServID, tab->serId) ) )
{
/* send notify */
if( UpnpGenaNotify( Hnd, tab->sid, PropSet) != 0 )
{
rtncd = -4;
goto ret;
}
}
tab = tab->next;
}
很明显,以上程序当tab的内容永远不等于NULL时,该程序就会造成死循环。当然正常情况下是没有问题的,可是异常时,就会出现问题。这类程序是很常见的,我们必须考虑的是,程序在任何情况下必须是能够正常运行的。
以上程序,我们可以加上一些判定条件,让它能够在异常情况下也能正常走出来,比如,加上一个计数器等等。 |
|
|
|