This is a discussion on Re: OpenSSL breaks with gcc 4.2 - Openssl ; On Thu, Nov 09, 2006, Peter Waltenberg wrote: > " > Please tell me how the compiler knows what type 'x' > should be passed as. If > you pass a pointer to a function as 'd2i' whose first type ...
On Thu, Nov 09, 2006, Peter Waltenberg wrote:
> Please tell me how the compiler knows what type 'x'
> should be passed as. If
> you pass a pointer to a function as 'd2i' whose first type is not defined
> a 'char **', you get undefined behavior -- how can the compiler possibly
> the correct type's passing rules when it thinks the function takes a 'char
> **' and it actuall takes an 'X509 **'.
> x is still just a pointer to data - so it's the same length in any case,
> all pointers to lvalues are the same length in C. The only issue there is
> whether it's aligned correctly - that's the programmers problem.
> Mixing something like char *(*d2i)(), and char ** IS problematic, since
> those aren't guaranteed to be the same length but as far as I can remember
> OpenSSL doesn't do that.
> d2i is a function (prototype is unknown)
> but I've been told x is a pointer, &p is a pointer, len is long. There's
> nothing indeterminate about the size of any of those.
> C isn't a strongly typed language - there's no language requirement for an
> accurate function prototype or that the types of the arguments be correct
> - only that the size of them is correct.
> C is not the same language as C++, this instance should work with a C
> compiler - whether or not the compiler is passing the arguments via the
> stack or in registers.
The d2i() case BTW can be replaced in most cases by an equivalent which uses
ASN1_ITEM which doesn't have this problem. There are a few ASN1_ITEM
replacements for some functions but nothing for PEM (yet).
Dr Stephen N. Henson. Email, S/MIME and PGP keys: see homepage
OpenSSL project core developer and freelance consultant.
Funding needed! Details on homepage.
OpenSSL Project http://www.openssl.org
Development Mailing List email@example.com
Automated List Manager firstname.lastname@example.org