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
#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
{
#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,\
(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
*/
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:
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)