Skip to content

Commit 97f81e6

Browse files
authored
Make compare_digest more constant-time.
The existing volatile `left`/`right` pointers guarantee that the reads will all occur, but does not guarantee that they will be _used_. So a compiler can still short-circuit the loop, saving e.g. the overhead of doing the xors and especially the overhead of the data dependency between `result` and the reads. That would change performance depending on where the first unequal byte occurs. This change removes that optimization. (This is change #1 from https://bugs.python.org/issue40791 .)
1 parent 404b23b commit 97f81e6

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

Modules/_operator.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,7 +735,7 @@ _tscmp(const unsigned char *a, const unsigned char *b,
735735
volatile const unsigned char *left;
736736
volatile const unsigned char *right;
737737
Py_ssize_t i;
738-
unsigned char result;
738+
volatile unsigned char result;
739739

740740
/* loop count depends on length of b */
741741
length = len_b;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy