mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Use a better for X outside of base64_compare_table.
This commit is contained in:
+9
-7
@@ -333,9 +333,10 @@ calc_changes(smartlist_slice_t *slice1,
|
||||
}
|
||||
|
||||
/* This table is from crypto.c. The SP and PAD defines are different. */
|
||||
#define X 255
|
||||
#define SP X
|
||||
#define PAD X
|
||||
#define NOT_VALID_BASE64 255
|
||||
#define X NOT_VALID_BASE64
|
||||
#define SP NOT_VALID_BASE64
|
||||
#define PAD NOT_VALID_BASE64
|
||||
static const uint8_t base64_compare_table[256] = {
|
||||
X, X, X, X, X, X, X, X, X, SP, SP, SP, X, SP, X, X,
|
||||
X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,
|
||||
@@ -378,7 +379,8 @@ get_id_hash(const cdline_t *line, cdline_t *hash_out)
|
||||
/* Stop when the first non-base64 character is found. Use unsigned chars to
|
||||
* avoid negative indexes causing crashes.
|
||||
*/
|
||||
while (base64_compare_table[*((unsigned char*)hash_end)] != X &&
|
||||
while (base64_compare_table[*((unsigned char*)hash_end)]
|
||||
!= NOT_VALID_BASE64 &&
|
||||
hash_end < line->s + line->len) {
|
||||
hash_end++;
|
||||
}
|
||||
@@ -458,15 +460,15 @@ base64cmp(const cdline_t *hash1, const cdline_t *hash2)
|
||||
while (1) {
|
||||
uint8_t av = base64_compare_table[*a];
|
||||
uint8_t bv = base64_compare_table[*b];
|
||||
if (av == X) {
|
||||
if (bv == X) {
|
||||
if (av == NOT_VALID_BASE64) {
|
||||
if (bv == NOT_VALID_BASE64) {
|
||||
/* Both ended with exactly the same characters. */
|
||||
return 0;
|
||||
} else {
|
||||
/* hash2 goes on longer than hash1 and thus hash1 is lower. */
|
||||
return -1;
|
||||
}
|
||||
} else if (bv == X) {
|
||||
} else if (bv == NOT_VALID_BASE64) {
|
||||
/* hash1 goes on longer than hash2 and thus hash1 is greater. */
|
||||
return 1;
|
||||
} else if (av < bv) {
|
||||
|
||||
Reference in New Issue
Block a user