Xinqi Bao's Git
projects
/
st.git
/ commitdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (from parent 1:
be7c6d7
)
Using strtol with overflow checking.
author
Christoph Lohmann <
[email protected]
>
Mon, 25 Feb 2013 12:23:56 +0000
(13:23 +0100)
committer
Christoph Lohmann <
[email protected]
>
Mon, 25 Feb 2013 12:23:56 +0000
(13:23 +0100)
st.c
patch
|
blob
|
history
diff --git
a/st.c
b/st.c
index
afa6813
..
23c4caf
100644
(file)
--- a/
st.c
+++ b/
st.c
@@
-1296,17
+1296,22
@@
tnewline(int first_col) {
void
csiparse(void) {
/* int noarg = 1; */
void
csiparse(void) {
/* int noarg = 1; */
- char *p = csiescseq.buf;
+ char *p = csiescseq.buf, *np;
+ long int v;
csiescseq.narg = 0;
if(*p == '?')
csiescseq.priv = 1, p++;
while(p < csiescseq.buf+csiescseq.len) {
csiescseq.narg = 0;
if(*p == '?')
csiescseq.priv = 1, p++;
while(p < csiescseq.buf+csiescseq.len) {
- while(isdigit(*p)) {
- csiescseq.arg[csiescseq.narg] *= 10;
- csiescseq.arg[csiescseq.narg] += *p++ - '0'/*, noarg = 0 */;
- }
+ np = NULL;
+ v = strtol(p, &np, 10);
+ if(v == LONG_MAX || v == LONG_MIN)
+ v = -1;
+ csiescseq.arg[csiescseq.narg] = v;
+ if(np != NULL)
+ p = np;
+
if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) {
csiescseq.narg++, p++;
} else {
if(*p == ';' && csiescseq.narg+1 < ESC_ARG_SIZ) {
csiescseq.narg++, p++;
} else {
@@
-2116,7
+2121,8
@@
tputc(char *c, int len) {
if(BETWEEN(ascii, 0x40, 0x7E)
|| csiescseq.len >= ESC_BUF_SIZ) {
term.esc = 0;
if(BETWEEN(ascii, 0x40, 0x7E)
|| csiescseq.len >= ESC_BUF_SIZ) {
term.esc = 0;
- csiparse(), csihandle();
+ csiparse();
+ csihandle();
}
} else if(term.esc & ESC_STR_END) {
term.esc = 0;
}
} else if(term.esc & ESC_STR_END) {
term.esc = 0;