Convert bitfields to integers in a safe way.
This is commit eb391c52ee
redone, but without the
non-standard anonymous union.
This commit is contained in:
parent
9b394bc887
commit
81afa26e4a
4 changed files with 11 additions and 2 deletions
|
@ -100,3 +100,10 @@ const char *winerror(int err) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
unsigned int bitfield_to_int(void *bitfield, size_t size) {
|
||||||
|
unsigned int value = 0;
|
||||||
|
if(size > sizeof value)
|
||||||
|
size = sizeof value;
|
||||||
|
memcpy(&value, bitfield, size);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
|
@ -43,4 +43,6 @@ extern const char *winerror(int);
|
||||||
#define strerror(x) ((x)>0?strerror(x):winerror(GetLastError()))
|
#define strerror(x) ((x)>0?strerror(x):winerror(GetLastError()))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern unsigned int bitfield_to_int(void *bitfield, size_t size);
|
||||||
|
|
||||||
#endif /* __TINC_UTILS_H__ */
|
#endif /* __TINC_UTILS_H__ */
|
||||||
|
|
|
@ -144,7 +144,7 @@ void dump_connections(void)
|
||||||
for(node = connection_tree->head; node; node = node->next) {
|
for(node = connection_tree->head; node; node = node->next) {
|
||||||
c = node->data;
|
c = node->data;
|
||||||
logger(LOG_DEBUG, _(" %s at %s options %lx socket %d status %04x outbuf %d/%d/%d"),
|
logger(LOG_DEBUG, _(" %s at %s options %lx socket %d status %04x outbuf %d/%d/%d"),
|
||||||
c->name, c->hostname, c->options, c->socket, *(uint32_t *)&c->status,
|
c->name, c->hostname, c->options, c->socket, bitfield_to_int(&c->status, sizeof c->status),
|
||||||
c->outbufsize, c->outbufstart, c->outbuflen);
|
c->outbufsize, c->outbufstart, c->outbuflen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -251,7 +251,7 @@ static void check_dead_connections(void)
|
||||||
} else {
|
} else {
|
||||||
if(c->status.remove) {
|
if(c->status.remove) {
|
||||||
logger(LOG_WARNING, _("Old connection_t for %s (%s) status %04x still lingering, deleting..."),
|
logger(LOG_WARNING, _("Old connection_t for %s (%s) status %04x still lingering, deleting..."),
|
||||||
c->name, c->hostname, *(uint32_t *)&c->status);
|
c->name, c->hostname, bitfield_to_int(&c->status, sizeof c->status));
|
||||||
connection_del(c);
|
connection_del(c);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue