|  | @@ -986,21 +986,19 @@ pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
 | 
	
		
			
				|  |  |    /* We'd like to do this, but openssl 0.9.7 doesn't have it:
 | 
	
		
			
				|  |  |       return EVP_PKEY_cmp(a,b) == 1;
 | 
	
		
			
				|  |  |    */
 | 
	
		
			
				|  |  | -  unsigned char *a_enc=NULL, *b_enc=NULL, *a_ptr, *b_ptr;
 | 
	
		
			
				|  |  | -  int a_len1, b_len1, a_len2, b_len2, result;
 | 
	
		
			
				|  |  | -  a_len1 = i2d_PublicKey(a, NULL);
 | 
	
		
			
				|  |  | -  b_len1 = i2d_PublicKey(b, NULL);
 | 
	
		
			
				|  |  | -  if (a_len1 != b_len1)
 | 
	
		
			
				|  |  | -    return 0;
 | 
	
		
			
				|  |  | -  a_ptr = a_enc = tor_malloc(a_len1);
 | 
	
		
			
				|  |  | -  b_ptr = b_enc = tor_malloc(b_len1);
 | 
	
		
			
				|  |  | -  a_len2 = i2d_PublicKey(a, &a_ptr);
 | 
	
		
			
				|  |  | -  b_len2 = i2d_PublicKey(b, &b_ptr);
 | 
	
		
			
				|  |  | -  tor_assert(a_len2 == a_len1);
 | 
	
		
			
				|  |  | -  tor_assert(b_len2 == b_len1);
 | 
	
		
			
				|  |  | -  result = tor_memeq(a_enc, b_enc, a_len1);
 | 
	
		
			
				|  |  | -  tor_free(a_enc);
 | 
	
		
			
				|  |  | -  tor_free(b_enc);
 | 
	
		
			
				|  |  | +  unsigned char *a_enc = NULL, *b_enc = NULL;
 | 
	
		
			
				|  |  | +  int a_len, b_len, result;
 | 
	
		
			
				|  |  | +  a_len = i2d_PublicKey(a, &a_enc);
 | 
	
		
			
				|  |  | +  b_len = i2d_PublicKey(b, &b_enc);
 | 
	
		
			
				|  |  | +  if (a_len != b_len || a_len < 0) {
 | 
	
		
			
				|  |  | +    result = 0;
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    result = tor_memeq(a_enc, b_enc, a_len);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  if (a_enc)
 | 
	
		
			
				|  |  | +    OPENSSL_free(a_enc);
 | 
	
		
			
				|  |  | +  if (b_enc)
 | 
	
		
			
				|  |  | +    OPENSSL_free(b_enc);
 | 
	
		
			
				|  |  |    return result;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 |