Age | Commit message (Collapse) | Author | Files | Lines |
|
There are two bugs in pdec() on INT_MIN:
* wrong output.
`n = 1-n' should be `n = -1-n' when n is INT_MIN.
* infinite loop.
gcc optimizes `if(n>=0)' into `if(true)' because `-INT_MIN' (signed integer overflow) is undefined behavior in C, and gcc assumes the negation of a negative number must be positive. The resulting binary keeps printing '-' forever given INT_MIN.
Try the simplified pdec.c below.
$ gcc pdec.c
$ ./a.out -2147483648
--214748364*
$ gcc pdec.c -O2
$ ./a.out -2147483648
<infinite loop>
$ gcc pdec.c -O2 -D__PATCH__
$ ./a.out -2147483648
-2147483648
=== pdec.c ===
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define io void
void pchr(io *f, int c)
{
putchar(c);
}
void pdec(io *f, int n)
{
if(n<0){
#ifndef __PATCH__
n=-n;
if(n>=0){
pchr(f, '-');
pdec(f, n);
return;
}
/* n is two's complement minimum integer */
n = 1-n;
#else
if(n!=INT_MIN){
pchr(f, '-');
pdec(f, -n);
return;
}
/* n is two's complement minimum integer */
n = -(INT_MIN+1);
#endif
pchr(f, '-');
pdec(f, n/10);
pchr(f, n%10+'1');
return;
}
if(n>9)
pdec(f, n/10);
pchr(f, n%10+'0');
}
int main(int argc, char **argv)
{
int n = atoi(argv[1]);
pdec(NULL, n);
putchar('\n');
}
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7241055
|
|
gcc compiles `p + length < p' into 'length < 0' since pointer overflow is undefined behavior in C. This breaks the check against a large `length'.
Use `length > pend - p' instead.
There's no need to check `length < 0' since `length' is from length_decode() and should be non-negative.
===
Try the simplified code.
void bar(void);
void foo(unsigned char *p, int length)
{
if (p + length < p)
bar();
}
$ gcc -S -o - t.c -O2
...
foo:
.LFB0:
.cfi_startproc
testl %esi, %esi
js .L4
rep
ret
.L4:
jmp bar
.cfi_endproc
Clearly `p' is not used at all.
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7231069
|
|
R=rsc
https://codereview.appspot.com/7565045
|
|
For single-button mouse users.
R=rsc
https://codereview.appspot.com/7620043
|
|
R=rsc
https://codereview.appspot.com/7304064
|
|
Ubuntu Precise seems to have a buggy X server
that sometimes fails at XCopyArea. Let devdraw
do it itself.
This will slow down remote X a little bit,
but slow and correct is better than fast and broken.
R=rsc
https://codereview.appspot.com/7310069
|
|
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7228044
|
|
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/7225059
|
|
R=rsc
https://codereview.appspot.com/7095050
|
|
R=rsc
https://codereview.appspot.com/7225073
|
|
R=rsc
https://codereview.appspot.com/7070070
|
|
R=rsc
https://codereview.appspot.com/7029054
|
|
R=rsc
https://codereview.appspot.com/7027044
|
|
|
|
R=rsc
CC=plan9port.codebot
https://codereview.appspot.com/6850108
|
|
R=rsc
http://codereview.appspot.com/6906057
|
|
R=rsc
https://codereview.appspot.com/6864051
|
|
R=rsc
https://codereview.appspot.com/6854130
|
|
R=rsc
http://codereview.appspot.com/6854094
|
|
R=rsc
http://codereview.appspot.com/6844083
|
|
R=rsc
http://codereview.appspot.com/6847105
|
|
Let's see if that's any better.
R=rsc
http://codereview.appspot.com/6850103
|
|
R=rsc
http://codereview.appspot.com/6782115
|
|
R=rsc
http://codereview.appspot.com/6850102
|
|
R=rsc
http://codereview.appspot.com/6854093
|
|
R=rsc
http://codereview.appspot.com/6846104
|
|
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/6854092
|
|
Probably not the right fix, but gets us going.
R=rsc
http://codereview.appspot.com/6782113
|
|
R=rsc
http://codereview.appspot.com/6847104
|
|
R=rsc
http://codereview.appspot.com/6855092
|
|
R=rsc
http://codereview.appspot.com/6858071
|
|
Fixed at 100 right now, but the plan is to make it accurate
and then use it.
R=rsc
http://codereview.appspot.com/6856091
|
|
Also add some ignored files to .hgignore
R=rsc
http://codereview.appspot.com/6842089
|
|
R=rsc
http://codereview.appspot.com/6736060
|
|
R=rsc
http://codereview.appspot.com/6742064
|
|
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/6614056
|
|
R=rsc, 0intro
CC=plan9port.codebot
http://codereview.appspot.com/6739047
|
|
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/5495046
|
|
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/6690049
|
|
R=rsc, quanstro
CC=plan9port.codebot
http://codereview.appspot.com/6657043
|
|
R=rsc
http://codereview.appspot.com/6744056
|
|
R=rsc
http://codereview.appspot.com/6744055
|
|
R=rsc
http://codereview.appspot.com/6744054
|
|
R=rsc
http://codereview.appspot.com/6741053
|
|
R=rsc
http://codereview.appspot.com/6749053
|
|
R=rsc
http://codereview.appspot.com/6734051
|
|
R=rsc
http://codereview.appspot.com/6744053
|
|
R=rsc
http://codereview.appspot.com/6750046
|
|
R=rsc
http://codereview.appspot.com/6737052
|
|
R=rsc
CC=plan9port.codebot
http://codereview.appspot.com/6625065
|