diff --git a/CHANGES b/CHANGES index e158dcd89ea530f3435c3eb883ffd6db7e38a404..c71f74af99daade6a0c9938f5085a8144b922bd7 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,12 @@ memory debugging code. OpenSSL already comes with code that finds memory leaks, but this gives people a chance to debug other memory problems. + + This change means that a call `CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON)' + is no longer dependent on if the macro CRYPTO_MDEBUG or friends were + used when the OpenSSL libcrypto was built. This is under debate and + may change back, but with another option to still get debugging even + if the library wasn't compiled that way. [Richard Levitte] *) Some S/MIME fixes. The OID for SMIMECapabilities was wrong, the diff --git a/crypto/crypto.h b/crypto/crypto.h index 0a76c771a74f44813fd2b77d376ac7ad873aeada..863b4e922426ae0023f6a63bdccdb24c17999a55 100644 --- a/crypto/crypto.h +++ b/crypto/crypto.h @@ -149,6 +149,14 @@ extern "C" { #define CRYPTO_MEM_CHECK_ENABLE 0x2 /* a bit */ #define CRYPTO_MEM_CHECK_DISABLE 0x3 /* an enume */ +/* The following are bit values to turn on or off options connected to the + * malloc checking functionality */ + +/* Adds time to the memory checking information */ +#define V_CRYPTO_MDEBUG_TIME 0x1 /* a bit */ +/* Adds thread number to the memory checking information */ +#define V_CRYPTO_MDEBUG_THREAD 0x2 /* a bit */ + /* typedef struct crypto_mem_st { @@ -196,35 +204,13 @@ typedef struct crypto_ex_data_func_st #define CRYPTO_EX_INDEX_X509_STORE 4 #define CRYPTO_EX_INDEX_X509_STORE_CTX 5 + /* This is the default callbacks, but we can have others as well */ #define CRYPTO_malloc_init() CRYPTO_set_mem_functions(\ (char *(*)())malloc,\ (char *(*)())realloc,\ (void (*)())free) - - -#ifdef CRYPTO_MDEBUG_ALL -# ifndef CRYPTO_MDEBUG_TIME -# define CRYPTO_MDEBUG_TIME -# endif -# ifndef CRYPTO_MDEBUG_THREAD -# define CRYPTO_MDEBUG_THREAD -# endif -#endif - -/* Magic to make sure we get correct values */ -#ifdef CRYPTO_MDEBUG_TIME -#define V_CRYPTO_MDEBUG_TIME 1 -#else -#define V_CRYPTO_MDEBUG_TIME 0 -#endif -#ifdef CRYPTO_MDEBUG_THREAD -#define V_CRYPTO_MDEBUG_THREAD 2 -#else -#define V_CRYPTO_MDEBUG_THREAD 0 -#endif - #define CRYPTO_malloc_debug_init() do {\ CRYPTO_set_mem_debug_functions(\ (void (*)())CRYPTO_dbg_malloc,\ @@ -232,10 +218,9 @@ typedef struct crypto_ex_data_func_st (void (*)())CRYPTO_dbg_free,\ (void (*)())CRYPTO_dbg_set_options,\ (void (*)())CRYPTO_dbg_get_options);\ - CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_TIME|V_CRYPTO_MDEBUG_THREAD);\ } while(0); -#if defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD +#if defined CRYPTO_MDEBUG_ALL || defined CRYPTO_MDEBUG_TIME || defined CRYPTO_MDEBUG_THREAD # ifndef CRYPTO_MDEBUG /* avoid duplicate #define */ # define CRYPTO_MDEBUG # endif @@ -329,7 +314,7 @@ int CRYPTO_remove_all_info(void); */ void CRYPTO_dbg_malloc(void *addr,int num,const char *file,int line,int before_p); void CRYPTO_dbg_realloc(void *addr1,void *addr2,int num,const char *file,int line,int before_p); -void CRYPTO_dbg_free(void *,int before_p); +void CRYPTO_dbg_free(void *addr,int before_p); /* Tell the debugging code about options. By default, the following values * apply: diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index 3465ec21d969707f4312e7f0270fee286160b998..4bddbe07b2a9a03a080bc5fa22f2a16c610ae0d1 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -106,7 +106,29 @@ typedef struct mem_st APP_INFO *app_info; } MEM; -static int options = V_CRYPTO_MDEBUG_TIME | V_CRYPTO_MDEBUG_THREAD; + +#ifdef CRYPTO_MDEBUG_ALL +# ifndef CRYPTO_MDEBUG_TIME +# define CRYPTO_MDEBUG_TIME +# endif +# ifndef CRYPTO_MDEBUG_THREAD +# define CRYPTO_MDEBUG_THREAD +# endif +#endif + +/* Get defaults that will depend on some macros defined elsewhere */ +#ifdef CRYPTO_MDEBUG_TIME +#define DEF_V_CRYPTO_MDEBUG_TIME V_CRYPTO_MDEBUG_TIME +#else +#define DEF_V_CRYPTO_MDEBUG_TIME 0 +#endif +#ifdef CRYPTO_MDEBUG_THREAD +#define DEF_V_CRYPTO_MDEBUG_THREAD V_CRYPTO_MDEBUG_THREAD +#else +#define DEF_V_CRYPTO_MDEBUG_THREAD 0 +#endif + +static int options = DEF_V_CRYPTO_MDEBUG_TIME | DEF_V_CRYPTO_MDEBUG_THREAD; int CRYPTO_mem_ctrl(int mode)