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


test/exdatatest.c:96:1: start of procedure test_exdata()
94.   }
95.   
96. > static int test_exdata(void)
97.   {
98.       MYOBJ *t1, *t2, *t3;

test/exdatatest.c:102:5: 
100.       char *p;
101.   
102. >     gbl_result = 1;
103.   
104.       p = strdup("hello world");

test/exdatatest.c:104:5: 
102.       gbl_result = 1;
103.   
104. >     p = strdup("hello world");
105.       saved_argl = 21;
106.       saved_argp = malloc(1);

test/exdatatest.c:105:5: 
103.   
104.       p = strdup("hello world");
105. >     saved_argl = 21;
106.       saved_argp = malloc(1);
107.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,

test/exdatatest.c:106:5: 
104.       p = strdup("hello world");
105.       saved_argl = 21;
106. >     saved_argp = malloc(1);
107.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
108.                                           saved_argl, saved_argp,

test/exdatatest.c:107:5: Skipping CRYPTO_get_ex_new_index(): empty list of specs
105.       saved_argl = 21;
106.       saved_argp = malloc(1);
107.       saved_idx = CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_APP,
           ^
108.                                           saved_argl, saved_argp,
109.                                           exnew, exdup, exfree);

test/exdatatest.c:110:5: Skipping MYOBJ_new(): empty list of specs
108.                                           saved_argl, saved_argp,
109.                                           exnew, exdup, exfree);
110.       t1 = MYOBJ_new();
           ^
111.       t2 = MYOBJ_new();
112.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))

test/exdatatest.c:111:5: Skipping MYOBJ_new(): empty list of specs
109.                                           exnew, exdup, exfree);
110.       t1 = MYOBJ_new();
111.       t2 = MYOBJ_new();
           ^
112.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
113.           return 0;

test/exdatatest.c:112:10: 
110.       t1 = MYOBJ_new();
111.       t2 = MYOBJ_new();
112. >     if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
113.           return 0;
114.   

test/testutil.c:290:1: start of procedure test_int_eq()
  288.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  289.   
  290. > DEFINE_COMPARISONS(int, int, "%d")
  291.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  292.   DEFINE_COMPARISONS(char, char, "%c")

test/testutil.c:290:1: Taking false branch
  288.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  289.   
  290. > DEFINE_COMPARISONS(int, int, "%d")
  291.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  292.   DEFINE_COMPARISONS(char, char, "%c")

test/testutil.c:202:1: start of procedure test_fail_message()
    200.   }
    201.   
    202. > static void test_fail_message(const char *prefix, const char *file, int line,
    203.                                 const char *type, const char *fmt, ...)
    204.   {

test/testutil.c:206:5: 
    204.   {
    205.       va_list ap;
    206. >     va_start(ap, fmt);
    207.       test_fail_message_va(prefix, file, line, type, fmt, ap);
    208.       va_end(ap);

test/testutil.c:207:5: 
    205.       va_list ap;
    206.       va_start(ap, fmt);
    207. >     test_fail_message_va(prefix, file, line, type, fmt, ap);
    208.       va_end(ap);
    209.   }

test/testutil.c:185:1: start of procedure test_fail_message_va()
      183.               PRINTF_FORMAT(5, 6);
      184.   
      185. > static void test_fail_message_va(const char *prefix, const char *file, int line,
      186.                                    const char *type, const char *fmt, va_list ap)
      187.   {

test/testutil.c:188:11: Condition is false
      186.                                    const char *type, const char *fmt, va_list ap)
      187.   {
      188.       fputs(prefix != NULL ? prefix : "ERROR", stderr);
                       ^
      189.       fputs(":", stderr);
      190.       if (type)

test/testutil.c:188:5: 
      186.                                    const char *type, const char *fmt, va_list ap)
      187.   {
      188. >     fputs(prefix != NULL ? prefix : "ERROR", stderr);
      189.       fputs(":", stderr);
      190.       if (type)

test/testutil.c:189:5: 
      187.   {
      188.       fputs(prefix != NULL ? prefix : "ERROR", stderr);
      189. >     fputs(":", stderr);
      190.       if (type)
      191.           fprintf(stderr, " (%s)", type);

test/testutil.c:190:9: Taking true branch
      188.       fputs(prefix != NULL ? prefix : "ERROR", stderr);
      189.       fputs(":", stderr);
      190.       if (type)
                     ^
      191.           fprintf(stderr, " (%s)", type);
      192.       if (fmt != NULL) {

test/testutil.c:191:9: 
      189.       fputs(":", stderr);
      190.       if (type)
      191. >         fprintf(stderr, " (%s)", type);
      192.       if (fmt != NULL) {
      193.           fputc(' ', stderr);

test/testutil.c:192:9: Taking true branch
      190.       if (type)
      191.           fprintf(stderr, " (%s)", type);
      192.       if (fmt != NULL) {
                     ^
      193.           fputc(' ', stderr);
      194.           vfprintf(stderr, fmt, ap);

test/testutil.c:193:9: 
      191.           fprintf(stderr, " (%s)", type);
      192.       if (fmt != NULL) {
      193. >         fputc(' ', stderr);
      194.           vfprintf(stderr, fmt, ap);
      195.       }

test/testutil.c:194:9: 
      192.       if (fmt != NULL) {
      193.           fputc(' ', stderr);
      194. >         vfprintf(stderr, fmt, ap);
      195.       }
      196.       if (file != NULL) {

test/testutil.c:196:9: Taking true branch
      194.           vfprintf(stderr, fmt, ap);
      195.       }
      196.       if (file != NULL) {
                     ^
      197.           fprintf(stderr, " @ %s:%d", file, line);
      198.       }

test/testutil.c:197:9: 
      195.       }
      196.       if (file != NULL) {
      197. >         fprintf(stderr, " @ %s:%d", file, line);
      198.       }
      199.       fputc('\n', stderr);

test/testutil.c:199:5: 
      197.           fprintf(stderr, " @ %s:%d", file, line);
      198.       }
      199. >     fputc('\n', stderr);
      200.   }
      201.   

test/testutil.c:200:1: return from a call to test_fail_message_va
      198.       }
      199.       fputc('\n', stderr);
      200. > }
      201.   
      202.   static void test_fail_message(const char *prefix, const char *file, int line,

test/testutil.c:208:5: 
    206.       va_start(ap, fmt);
    207.       test_fail_message_va(prefix, file, line, type, fmt, ap);
    208. >     va_end(ap);
    209.   }
    210.   

test/testutil.c:209:1: return from a call to test_fail_message
    207.       test_fail_message_va(prefix, file, line, type, fmt, ap);
    208.       va_end(ap);
    209. > }
    210.   
    211.   void test_info_c90(const char *desc, ...)

test/testutil.c:290:1: return from a call to test_int_eq
  288.       DEFINE_COMPARISON(type, name, ge, >=, fmt)
  289.   
  290. > DEFINE_COMPARISONS(int, int, "%d")
  291.   DEFINE_COMPARISONS(unsigned int, uint, "%u")
  292.   DEFINE_COMPARISONS(char, char, "%c")

test/exdatatest.c:112:10: Taking true branch
110.       t1 = MYOBJ_new();
111.       t2 = MYOBJ_new();
112.       if (!TEST_int_eq(t1->st, 1) || !TEST_int_eq(t2->st, 1))
                ^
113.           return 0;
114.   
