I suggest you remove all files in include/openssl/, then rebuild.

The reason for your problem is that the distribution contains a bunch
of symlinks, like this:

  lrwxrwxrwx openssl/openssl      0 2011-02-08 18:13 
openssl-1.0.0d/include/openssl/opensslconf.h -> ../../crypto/opensslconf.h

On Unix, that works with no problems.  On environments that don't
implement symlinks in a similar way, there may be problems, because
it's not certain they will be recreated.  Removing include/openssl/*.h
makes sure these will be.

Cheers,
Richard

In message <rt-3.4.5-52058-1305706213-1353.2519-2...@openssl.org> on Wed, 18 
May 2011 10:10:13 +0200 (CEST), "dave via RT" <r...@openssl.org> said:

> configuration:
> *  openssl 1.0.0.d
> *  Win32, VC6
> *  static library
>  
> (I don't know if the problem is confined to that configuration, but it's
> what I'm using).
>  
> There appear to be two versions of opensslconf.h that are generated from
> the Configure script.  One is placed in ./include/openssl, and one is
> placed in ./crypto.  However, they are different; in particular with
> respect to the definition of OPENSSL_EXPORT_VAR_AS_FUNCTION.  In the
> 'public' one placed in ./include/openssl, this is #undef'ed at line 79.
> In the 'internal' one placed in ./crypto, this is #undef'ed but then
> immediately #defined'ed at lines 84..85
>  
> The result is that, if the caller defines their own ASN1_SEQUENCE, and
> uses that as a member of another ASN1_SEQUENCE, then the resulting code
> for the _new() method will crash in tasn_new.c:51.
>  
> The reason is that the internal 'item' member of the template record
> points to the template structure of the member sequence directly, rather
> than to a function which returns the template of that member sequence.
>  
> Example of failing code:
>  
> //begin failing code=============
>  
> //defs==========
>  
> typedef struct {
>  ASN1_OBJECT* type;
> } INSIDE_SEQ;
>  
> ASN1_SEQUENCE(INSIDE_SEQ) = {
>  ASN1_SIMPLE(INSIDE_SEQ, type, ASN1_OBJECT),
> } ASN1_SEQUENCE_END(INSIDE_SEQ)
> DECLARE_ASN1_FUNCTIONS(INSIDE_SEQ)
> IMPLEMENT_ASN1_FUNCTIONS(INSIDE_SEQ)
>  
> 
> typedef struct {
>  ASN1_OBJECT* type;
>  INSIDE_SEQ* member;
> } OUTSIDE_SEQ;
>  
> ASN1_SEQUENCE(OUTSIDE_SEQ) = {
>     ASN1_SIMPLE(OUTSIDE_SEQ, type, ASN1_OBJECT),
>     ASN1_SIMPLE(OUTSIDE_SEQ, member, INSIDE_SEQ)
> } ASN1_SEQUENCE_END(OUTSIDE_SEQ)
> DECLARE_ASN1_FUNCTIONS(OUTSIDE_SEQ)
> IMPLEMENT_ASN1_FUNCTIONS(OUTSIDE_SEQ)
> 
>  
> //code==========
> ....
> OUTSIDE_SEQ* pos = OUTSIDE_SEQ_new();    //crashes with access vioation
> ...
>  
>  
> //end failing code====================
>  
>  
> Complications:
> *  since opensslconf.h #undef's the controlling constant, it isn't
> possible to modify the behaviour with compiler defs, etc.
> *  I didn't want to tamper with the generated opensslconf.h in case that
> made things worse in an unexpected way.
>  
> I have made example code work by 'fixing up' the template record
> definition manually, first by defining a function:
>  
> const ASN1_ITEM* INSIDE_SEQ_it_haquery(void)
> {
> return &INSIDE_SEQ_it;
> } 
>  
> and then changing the 'const' data segment (where the template defs are
> placed) to be writeable,
>  
> and then fixing up the template record this way:
>  
>  {
>  ASN1_TEMPLATE* p = (ASN1_TEMPLATE*)&OUTSIDE_SEQ_seq_tt[1];
>  p->item = (void*) INSIDE_SEQ_it_haquery;
>  }
> 
> After dong that, then the call to:
>  
> OUTSIDE_SEQ* pos = OUTSIDE_SEQ_new();
>  
> will work as expected.  Of course, this is not really a good general
> solution.
>  
>  
> -dave
> 


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       openssl-dev@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to