Fix 64-bit return issue in parse_log_domain()

If unsigned int is 32-bits long, then our old code would give a
wrong result with any log domain whose mask was >= (1<<32).
Fortunately, there are no such log domains right now: the domain
mask is only 64 bits long to accommodate some flags.

Found by coverity as CID 1452041.

Fixes bug 31451; bugfix on 0.4.1.4-rc.
This commit is contained in:
Nick Mathewson 2019-08-19 13:59:57 -04:00
parent 36a27fa2d3
commit 87a3c5b110
2 changed files with 5 additions and 1 deletions

4
changes/ticket31451 Normal file
View File

@ -0,0 +1,4 @@
o Minor bugfixes (logging):
- Fix a code issue that would have broken our parsing of log
domains as soon as we had 33 of them. Fortunately, we still
only have 29. Fixes bug 31451; bugfix on 0.4.1.4-rc.

View File

@ -1285,7 +1285,7 @@ parse_log_domain(const char *domain)
int i;
for (i=0; domain_list[i]; ++i) {
if (!strcasecmp(domain, domain_list[i]))
return (1u<<i);
return (UINT64_C(1)<<i);
}
return 0;
}