[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [or-cvs] Resolve type-punning warnings



Nick Mathewson wrote:

Update of /home/or/cvsroot/src/common
In directory moria.mit.edu:/tmp/cvs-serv317/src/common

Modified Files:
crypto.c Log Message:
Resolve type-punning warnings

Index: crypto.c
===================================================================
RCS file: /home/or/cvsroot/src/common/crypto.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -d -r1.59 -r1.60
--- crypto.c 30 Mar 2004 22:42:26 -0000 1.59
+++ crypto.c 30 Mar 2004 22:50:49 -0000 1.60
@@ -650,12 +650,21 @@
int crypto_pk_asn1_encode(crypto_pk_env_t *pk, char *dest, int dest_len)
{
int len;
+ unsigned char *buf, *bufp;
len = i2d_RSAPublicKey((RSA*)pk->key, NULL);
if (len < 0 || len > dest_len)
return -1;
- len = i2d_RSAPublicKey((RSA*)pk->key, (unsigned char**)&dest);
- if (len < 0)
+ bufp = buf = (unsigned char *)tor_malloc(len+1);
+ len = i2d_RSAPublicKey((RSA*)pk->key, &bufp);
+ if (len < 0) {
+ tor_free(buf);
return -1;
+ }
+ /* We don't encode directly into 'dest', because that would be illegal
+ * type-punning. (C99 is smarter than me, C99 is smarter than me...)
+ */
+ memcpy(dest,buf,len);
+ tor_free(buf);
return len;
}
@@ -664,14 +673,18 @@
crypto_pk_env_t *crypto_pk_asn1_decode(const char *str, int len)
{
RSA *rsa;
+ unsigned char *buf, *bufp;
+ bufp = buf = (unsigned char *)tor_malloc(len);
Why isn't tor_malloc returning void *?

+  memcpy(buf,str,len);
   /* This ifdef suppresses a type warning.  Take out the first case once
    * everybody is using openssl 0.9.7 or later.
    */
 #if OPENSSL_VERSION_NUMBER < 0x00907000l
-  rsa = d2i_RSAPublicKey(NULL, (unsigned char**)&str, len);
+  rsa = d2i_RSAPublicKey(NULL, &bufp, len);
 #else
-  rsa = d2i_RSAPublicKey(NULL, (const unsigned char**)&str, len);
+  rsa = d2i_RSAPublicKey(NULL, (const unsigned char **)&bufp, len);
Why not make bufp a const unsigned char *?

 #endif
+  tor_free(buf);
   if (!rsa)
     return NULL; /* XXXX log openssl error */
   return _crypto_new_pk_env_rsa(rsa);



--
http://www.apache-ssl.org/ben.html       http://www.thebunker.net/

"There is no limit to what a man can do or how far he can go if he
doesn't mind who gets the credit." - Robert Woodruff