{strchr,strlen}_basic: don't leak the dlopen'ed handle; close after use

MFC after:	3 days
Reported by:	Coverity
CID:		978299, 978300
This commit is contained in:
Enji Cooper 2017-01-04 04:50:03 +00:00
parent 5d37d9cc25
commit 83e8b13f15
2 changed files with 22 additions and 1 deletions

View File

@ -58,6 +58,9 @@ ATF_TC_HEAD(strchr_basic, tc)
ATF_TC_BODY(strchr_basic, tc)
{
#ifdef __FreeBSD__
void *dl_handle;
#endif
unsigned int t, a;
char *off;
char buf[32];
@ -245,8 +248,12 @@ ATF_TC_BODY(strchr_basic, tc)
"abcdefgh/abcdefgh/",
};
#ifdef __FreeBSD__
dl_handle = dlopen(NULL, RTLD_LAZY);
strchr_fn = dlsym(dl_handle, "test_strlen");
#else
strchr_fn = dlsym(dlopen(0, RTLD_LAZY), "test_strchr");
#endif
if (!strchr_fn)
strchr_fn = strchr;
@ -281,6 +288,9 @@ ATF_TC_BODY(strchr_basic, tc)
verify_strchr(buf + a, 0xff, t, a);
}
}
#ifdef __FreeBSD__
(void)dlclose(dl_handle);
#endif
}
ATF_TP_ADD_TCS(tp)

View File

@ -40,6 +40,9 @@ ATF_TC_HEAD(strlen_basic, tc)
ATF_TC_BODY(strlen_basic, tc)
{
#ifdef __FreeBSD__
void *dl_handle;
#endif
/* try to trick the compiler */
size_t (*strlen_fn)(const char *);
@ -107,7 +110,12 @@ ATF_TC_BODY(strlen_basic, tc)
* During testing it is useful have the rest of the program
* use a known good version!
*/
#ifdef __FreeBSD__
dl_handle = dlopen(NULL, RTLD_LAZY);
strlen_fn = dlsym(dl_handle, "test_strlen");
#else
strlen_fn = dlsym(dlopen(NULL, RTLD_LAZY), "test_strlen");
#endif
if (!strlen_fn)
strlen_fn = strlen;
@ -134,6 +142,9 @@ ATF_TC_BODY(strlen_basic, tc)
}
}
}
#ifdef __FreeBSD__
(void)dlclose(dl_handle);
#endif
}
ATF_TC(strlen_huge);