OPENSSL中二级指针作为参数的坑
OPENSSL中二级指针作为参数的坑
现象
1
2
3
4
unsigned char *pPub, *pPub1;
pubLen = i2d_X509_PUBKEY(x509Puk, NULL);
pPub1 = pPub = (unsigned char*)malloc(pubLen);
pubLen = i2d_X509_PUBKEY(x509Puk, &pPub1);
以上代码关注最后一行第二个参数,传入一个二级指针pPub1,但是这个参数在函数内部会被修改,所以在传入前要先记录指针原来指向pPub,后续代码应该使用pPub,而不应信任pPub2。
原理猜测
没有详细研究源码,个人猜测内部操作大概如下:
1
2
3
4
5
func(char* buf){
for(int i=0;i!=100;i++){
*(buf++) = i;
}
}
直接改变指针指向操作了 buf,导致实参指向改变了,这里是 openssl 常见的。
This post is licensed under CC BY 4.0 by the author.