@
cchange if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
goto fail;
goto fail;
先改写一下
if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0) {
goto fail; // err != 0
}
goto fail; // err == 0
这个fail其实是一个exit point(这段代码只有一个exit point), 不要当作“失败”,因为无论是成功还是失败, fail之后的代码都会执行
fail:
SSLFreeBuffer(&signedHashes);
SSLFreeBuffer(&hashCtx);
return err; // err == 0, "Success baby"
这样,第二个fail的问题在于,err此时为0。C语言的0返回值一般约定是没有error,这样调用者就认为SSLVerifySignedServerKeyExchange() 函数是成功的,然后就是大乌龙了。