mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-05 05:45:46 +00:00
virmock: Initialize both symbols in VIR_MOCK_REAL_INIT_ALT
It may happen that both symbols are present. Especially when chaining mocks. For instance if a test is using virpcimock and then both stat and __xstat would be present in the address space as virpcimock implements both. Then, if the test would try to use say virfilewrapper (which again uses VIR_MOCK_REAL_INIT_ALT() to init real_stat and real___xstat) it would find stat() from virpcimock and stop there. The virfilewrapper.c:real___xstat wouldn't be initialized and thus it may result in a segfault. The reason for segfault is that sys/stat.h may redefine stat() to call __xstat(). Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
27b6ca7d9c
commit
d7e5baa5a1
@ -292,8 +292,9 @@
|
|||||||
|
|
||||||
# define VIR_MOCK_REAL_INIT_ALT(name1, name2) \
|
# define VIR_MOCK_REAL_INIT_ALT(name1, name2) \
|
||||||
do { \
|
do { \
|
||||||
if (!(real_ ## name1 = dlsym(RTLD_NEXT, #name1)) && \
|
real_ ## name1 = dlsym(RTLD_NEXT, #name1); \
|
||||||
!(real_ ## name2 = dlsym(RTLD_NEXT, #name2))) { \
|
real_ ## name2 = dlsym(RTLD_NEXT, #name2); \
|
||||||
|
if (!real_##name1 && !real_##name2) { \
|
||||||
fprintf(stderr, "Cannot find real '%s' or '%s' symbol\n", \
|
fprintf(stderr, "Cannot find real '%s' or '%s' symbol\n", \
|
||||||
#name1, #name2); \
|
#name1, #name2); \
|
||||||
abort(); \
|
abort(); \
|
||||||
|
Loading…
Reference in New Issue
Block a user