Backport crash fix that made it into master with the x509_extension

backport from here.
This commit is contained in:
Bernhard Amann 2014-02-28 02:09:06 -08:00
parent 30860e4226
commit 1735e33691

View file

@ -163,10 +163,13 @@ void file_analysis::X509::ParseExtension(X509_EXTENSION* ex)
BIO_flush(bio); BIO_flush(bio);
int length = BIO_pending(bio); int length = BIO_pending(bio);
char *buffer = new char[length];
// Use OPENSSL_malloc here. Using new or anything else can lead
// to interesting, hard to debug segfaults.
char *buffer = (char*) OPENSSL_malloc(length);
BIO_read(bio, (void*)buffer, length); BIO_read(bio, (void*)buffer, length);
StringVal* ext_val = new StringVal(length, buffer); StringVal* ext_val = new StringVal(length, buffer);
delete(buffer); OPENSSL_free(buffer);
BIO_free_all(bio); BIO_free_all(bio);
RecordVal* pX509Ext = new RecordVal(BifType::Record::X509::Extension); RecordVal* pX509Ext = new RecordVal(BifType::Record::X509::Extension);
@ -189,16 +192,13 @@ void file_analysis::X509::ParseExtension(X509_EXTENSION* ex)
mgr.QueueEvent(x509_extension, vl); mgr.QueueEvent(x509_extension, vl);
// look if we have a specialized handler for this event... // look if we have a specialized handler for this event...
if ( OBJ_obj2nid(ext_asn) == NID_basic_constraints ) if ( OBJ_obj2nid(ext_asn) == NID_basic_constraints )
ParseBasicConstraints(ex); ParseBasicConstraints(ex);
else if ( OBJ_obj2nid(ext_asn) == NID_subject_alt_name ) else if ( OBJ_obj2nid(ext_asn) == NID_subject_alt_name )
ParseSAN(ex); ParseSAN(ex);
} }
void file_analysis::X509::ParseBasicConstraints(X509_EXTENSION* ex) void file_analysis::X509::ParseBasicConstraints(X509_EXTENSION* ex)
{ {
assert(OBJ_obj2nid(X509_EXTENSION_get_object(ex)) == NID_basic_constraints); assert(OBJ_obj2nid(X509_EXTENSION_get_object(ex)) == NID_basic_constraints);
@ -222,7 +222,6 @@ void file_analysis::X509::ParseBasicConstraints(X509_EXTENSION* ex)
mgr.QueueEvent(x509_ext_basic_constraints, vl); mgr.QueueEvent(x509_ext_basic_constraints, vl);
} }
} }
void file_analysis::X509::ParseSAN(X509_EXTENSION* ext) void file_analysis::X509::ParseSAN(X509_EXTENSION* ext)