If anyone here has used Second Life's scripting language LSL, they had to work around this issue. Apparently they now calculate x / -1 as -x instead, which gets a counter-intuitive result when x=INT_MIN but doesn't crash. I believe once upon a time this was documented and everything.
But -1*INT_MIN is still 1 greater than INT_MAX in two's complement ... so that's signed overflow and thus undefined behavior in C. Assuming x86 signed overflow behavior, you're just back to INT_MIN again? Or am I crazy?
IDIV DoS (INT_MIN / -1)
21–24 of 24 posts
The language in question isn't C, so they can have whatever semantics they want.
Re: IDIV DoS (INT_MIN / -1)
#22Fixed-precision integer arithmetic is evil.
And then a lot of game programmers would disagree :)
I for one just learned to love doubles...
Re: IDIV DoS (INT_MIN / -1)
#23Re: IDIV DoS (INT_MIN / -1)
#24Earlier quoted context omitted.
But -1*INT_MIN is still 1 greater than INT_MAX in two's complement ... so that's signed overflow and thus undefined behavior in C. Assuming x86 signed overflow behavior, you're just back to INT_MIN again? Or am I crazy?
The language in question isn't C, so they can have whatever semantics they want.
Sorry, the use of the nym INT_MIN suggested to me that the implementation under the covers was C.
It looks like it was once an interpreter, but is now compiled down to CLR and run with Mono.