bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#8254: race condition in dired.c's scmp function


From: Eli Zaretskii
Subject: bug#8254: race condition in dired.c's scmp function
Date: Tue, 15 Mar 2011 03:06:12 -0400

> Date: Mon, 14 Mar 2011 23:16:26 -0700
> From: Paul Eggert <address@hidden>
> Cc: 
> 
> The following code in the Emacs trunk src/dired.c's scmp function has
> undefined behavior:
> 
>       while (l
>            && (DOWNCASE ((unsigned char) *s1++)
>                == DOWNCASE ((unsigned char) *s2++)))
>       l--;
> 
> Because the DOWNCASE macro assigns to the global variables case_temp1
> and case_temp2, (DOWNCASE (x) == DOWNCASE (y)) is not valid, as the
> assignments can collide and lead to a race condition.
> [...]
> I plan to work around the problem with something like the following
> patch.

Whew!  How about a much simpler fix:

  while (l
         && (c1 = DOWNCASE ((unsigned char) *s1++),
             c2 = DOWNCASE ((unsigned char) *s2++),
             c1 == c2))
    l--;

(with suitable declarations of c1 and c2)?  Will that fix the
undefined behavior?





reply via email to

[Prev in Thread] Current Thread [Next in Thread]