|
发表于 2016-10-9 17:25:37
|
显示全部楼层
符合misra并不会降低效率,至少ucos就是符合misra的。misra更多的目的还是减少bug发生的概率。很多时候并不是程序员水平不行,而是一时粗心产生了bug。比如有名的苹果SSL堆栈漏洞:
static OSStatus SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
uint8_t *signature, UInt16 signatureLen)
{
OSStatus err;
...
if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
goto fail;
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
goto fail;
...
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err;
}
在这里程序员粗心的多打了一行goto fail; 造成了SSLHashSHA1.final(&hashCtx, &hashOut)) 永远不会执行。它深嵌在连接握手的过程中,所以很难有测试用例覆盖到这个错误。如果遵循一些规范,这种错误是可能避免的。
比如:正确的缩进,if后面必须跟{},不使用goto。 |
|