test/exdatatest.c:206: error: MEMORY_LEAK
  memory dynamically allocated by call to `CRYPTO_strdup()` at line 195, column 9 is not reachable after line 206, column 10.
Showing all 41 steps of the trace


test/exdatatest.c:186:1: start of procedure test_exdata()
184.   }
185.   
186. > static int test_exdata(void)
187.   {
188.       MYOBJ *t1, *t2, *t3;

test/exdatatest.c:193:5: 
191.       char *p;
192.   
193. >     gbl_result = 1;
194.   
195.       p = OPENSSL_strdup("hello world");

test/exdatatest.c:195:5: 
193.       gbl_result = 1;
194.   
195. >     p = OPENSSL_strdup("hello world");
196.       saved_argl = 21;
197.       saved_argp = OPENSSL_malloc(1);

crypto/o_str.c:27:1: start of procedure CRYPTO_strdup()
  25.   }
  26.   
  27. > char *CRYPTO_strdup(const char *str, const char* file, int line)
  28.   {
  29.       char *ret;

crypto/o_str.c:31:9: Taking false branch
  29.       char *ret;
  30.   
  31.       if (str == NULL)
                ^
  32.           return NULL;
  33.       ret = CRYPTO_malloc(strlen(str) + 1, file, line);

crypto/o_str.c:33:5: 
  31.       if (str == NULL)
  32.           return NULL;
  33. >     ret = CRYPTO_malloc(strlen(str) + 1, file, line);
  34.       if (ret != NULL)
  35.           strcpy(ret, str);

crypto/mem.c:170:1: start of procedure CRYPTO_malloc()
    168.   #endif
    169.   
    170. > void *CRYPTO_malloc(size_t num, const char *file, int line)
    171.   {
    172.       void *ret = NULL;

crypto/mem.c:172:5: 
    170.   void *CRYPTO_malloc(size_t num, const char *file, int line)
    171.   {
    172. >     void *ret = NULL;
    173.   
    174.       if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)

crypto/mem.c:174:9: Taking false branch
    172.       void *ret = NULL;
    173.   
    174.       if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)
                   ^
    175.           return malloc_impl(num, file, line);
    176.   

crypto/mem.c:177:9: Taking false branch
    175.           return malloc_impl(num, file, line);
    176.   
    177.       if (num == 0)
                   ^
    178.           return NULL;
    179.   

crypto/mem.c:181:5: 
    179.   
    180.       FAILTEST();
    181. >     allow_customize = 0;
    182.   #ifndef OPENSSL_NO_CRYPTO_MDEBUG
    183.       if (call_malloc_debug) {

crypto/mem.c:191:5: 
    189.       }
    190.   #else
    191. >     (void)(file); (void)(line);
    192.       ret = malloc(num);
    193.   #endif

crypto/mem.c:191:19: 
    189.       }
    190.   #else
    191. >     (void)(file); (void)(line);
    192.       ret = malloc(num);
    193.   #endif

crypto/mem.c:192:5: 
    190.   #else
    191.       (void)(file); (void)(line);
    192. >     ret = malloc(num);
    193.   #endif
    194.   

crypto/mem.c:195:5: 
    193.   #endif
    194.   
    195. >     return ret;
    196.   }
    197.   

crypto/mem.c:196:1: return from a call to CRYPTO_malloc
    194.   
    195.       return ret;
    196. > }
    197.   
    198.   void *CRYPTO_zalloc(size_t num, const char *file, int line)

crypto/o_str.c:34:9: Taking true branch
  32.           return NULL;
  33.       ret = CRYPTO_malloc(strlen(str) + 1, file, line);
  34.       if (ret != NULL)
                ^
  35.           strcpy(ret, str);
  36.       return ret;

crypto/o_str.c:35:9: 
  33.       ret = CRYPTO_malloc(strlen(str) + 1, file, line);
  34.       if (ret != NULL)
  35. >         strcpy(ret, str);
  36.       return ret;
  37.   }

crypto/o_str.c:36:5: 
  34.       if (ret != NULL)
  35.           strcpy(ret, str);
  36. >     return ret;
  37.   }
  38.   

crypto/o_str.c:37:1: return from a call to CRYPTO_strdup
  35.           strcpy(ret, str);
  36.       return ret;
  37. > }
  38.   
  39.   char *CRYPTO_strndup(const char *str, size_t s, const char* file, int line)

test/exdatatest.c:196:5: 
194.   
195.       p = OPENSSL_strdup("hello world");
196. >     saved_argl = 21;
197.       saved_argp = OPENSSL_malloc(1);
198.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,

test/exdatatest.c:197:5: 
195.       p = OPENSSL_strdup("hello world");
196.       saved_argl = 21;
197. >     saved_argp = OPENSSL_malloc(1);
198.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
199.                                           saved_argl, saved_argp,

crypto/mem.c:170:1: start of procedure CRYPTO_malloc()
  168.   #endif
  169.   
  170. > void *CRYPTO_malloc(size_t num, const char *file, int line)
  171.   {
  172.       void *ret = NULL;

crypto/mem.c:172:5: 
  170.   void *CRYPTO_malloc(size_t num, const char *file, int line)
  171.   {
  172. >     void *ret = NULL;
  173.   
  174.       if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)

crypto/mem.c:174:9: Taking false branch
  172.       void *ret = NULL;
  173.   
  174.       if (malloc_impl != NULL && malloc_impl != CRYPTO_malloc)
                 ^
  175.           return malloc_impl(num, file, line);
  176.   

crypto/mem.c:177:9: Taking false branch
  175.           return malloc_impl(num, file, line);
  176.   
  177.       if (num == 0)
                 ^
  178.           return NULL;
  179.   

crypto/mem.c:181:5: 
  179.   
  180.       FAILTEST();
  181. >     allow_customize = 0;
  182.   #ifndef OPENSSL_NO_CRYPTO_MDEBUG
  183.       if (call_malloc_debug) {

crypto/mem.c:191:5: 
  189.       }
  190.   #else
  191. >     (void)(file); (void)(line);
  192.       ret = malloc(num);
  193.   #endif

crypto/mem.c:191:19: 
  189.       }
  190.   #else
  191. >     (void)(file); (void)(line);
  192.       ret = malloc(num);
  193.   #endif

crypto/mem.c:192:5: 
  190.   #else
  191.       (void)(file); (void)(line);
  192. >     ret = malloc(num);
  193.   #endif
  194.   

crypto/mem.c:195:5: 
  193.   #endif
  194.   
  195. >     return ret;
  196.   }
  197.   

crypto/mem.c:196:1: return from a call to CRYPTO_malloc
  194.   
  195.       return ret;
  196. > }
  197.   
  198.   void *CRYPTO_zalloc(size_t num, const char *file, int line)

test/exdatatest.c:198:5: Skipping CRYPTO_get_ex_new_index(): empty list of specs
196.       saved_argl = 21;
197.       saved_argp = OPENSSL_malloc(1);
198.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
           ^
199.                                           saved_argl, saved_argp,
200.                                           exnew, exdup, exfree);

test/exdatatest.c:201:5: Skipping CRYPTO_get_ex_new_index(): empty list of specs
199.                                           saved_argl, saved_argp,
200.                                           exnew, exdup, exfree);
201.       saved_idx2 = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
           ^
202.                                            saved_argl, saved_argp,
203.                                            exnew2, exdup2, exfree2);

test/exdatatest.c:204:5: Skipping MYOBJ_new(): empty list of specs
202.                                            saved_argl, saved_argp,
203.                                            exnew2, exdup2, exfree2);
204.       t1 = MYOBJ_new();
           ^
205.       t2 = MYOBJ_new();
206.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))

test/exdatatest.c:205:5: Skipping MYOBJ_new(): empty list of specs
203.                                            exnew2, exdup2, exfree2);
204.       t1 = MYOBJ_new();
205.       t2 = MYOBJ_new();
           ^
206.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
207.           return 0;

test/exdatatest.c:206:10: 
204.       t1 = MYOBJ_new();
205.       t2 = MYOBJ_new();
206. >     if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
207.           return 0;
208.       if (!TEST_ptr(CRYPTO_get_ex_data(&t1->ex_data, saved_idx2)))

test/testutil/tests.c:208:1: start of procedure test_int_eq()
  206.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  207.   
  208. > DEFINE_COMPARISONS(int, int, "%d")
  209.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  210.   DEFINE_COMPARISONS(char, char, "%c")

test/testutil/tests.c:208:1: Taking false branch
  206.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  207.   
  208. > DEFINE_COMPARISONS(int, int, "%d")
  209.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  210.   DEFINE_COMPARISONS(char, char, "%c")

test/testutil/tests.c:208:1: return from a call to test_int_eq
  206.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  207.   
  208. > DEFINE_COMPARISONS(int, int, "%d")
  209.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  210.   DEFINE_COMPARISONS(char, char, "%c")

test/exdatatest.c:206:10: Taking true branch
204.       t1 = MYOBJ_new();
205.       t2 = MYOBJ_new();
206.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
                ^
207.           return 0;
208.       if (!TEST_ptr(CRYPTO_get_ex_data(&t1->ex_data, saved_idx2)))
