Post

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.