diff options
Diffstat (limited to 'src/lib/libcrypto/x509/x509_cmp.c')
-rw-r--r-- | src/lib/libcrypto/x509/x509_cmp.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/src/lib/libcrypto/x509/x509_cmp.c b/src/lib/libcrypto/x509/x509_cmp.c index b147d573d2..3f9f9b3d47 100644 --- a/src/lib/libcrypto/x509/x509_cmp.c +++ b/src/lib/libcrypto/x509/x509_cmp.c | |||
@@ -199,19 +199,13 @@ unsigned long X509_NAME_hash(X509_NAME *x) | |||
199 | { | 199 | { |
200 | unsigned long ret=0; | 200 | unsigned long ret=0; |
201 | unsigned char md[16]; | 201 | unsigned char md[16]; |
202 | unsigned char str[256],*p,*pp; | ||
203 | int i; | ||
204 | |||
205 | i=i2d_X509_NAME(x,NULL); | ||
206 | if (i > sizeof(str)) | ||
207 | p=OPENSSL_malloc(i); | ||
208 | else | ||
209 | p=str; | ||
210 | 202 | ||
211 | pp=p; | 203 | /* Ensure cached version is up to date */ |
212 | i2d_X509_NAME(x,&pp); | 204 | i2d_X509_NAME(x,NULL); |
213 | MD5((unsigned char *)p,i,&(md[0])); | 205 | /* Use cached encoding directly rather than copying: this should |
214 | if (p != str) OPENSSL_free(p); | 206 | * keep libsafe happy. |
207 | */ | ||
208 | MD5((unsigned char *)x->bytes->data,x->bytes->length,&(md[0])); | ||
215 | 209 | ||
216 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| | 210 | ret=( ((unsigned long)md[0] )|((unsigned long)md[1]<<8L)| |
217 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) | 211 | ((unsigned long)md[2]<<16L)|((unsigned long)md[3]<<24L) |