Skip to content

Commit 600fe28

Browse files
committed
escape.c: fix an integer overflow issue, especially on 32-bit archs
1 parent d67a4c4 commit 600fe28

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

lib/escape.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -76,25 +76,25 @@ escape_name(struct escaped_string *e, const struct name *n)
7676
}
7777
}
7878
char *dp = e->escaped;
79-
const char *dep = dp + lim;
79+
const char *dsp = dp;
8080
for (p = sp; p < ep; p++) {
8181
char ch = *p;
8282
if (need_escape(ch)) {
83-
if (dp + escaped_char_size > dep) {
83+
if (dp + escaped_char_size - dsp > lim) {
8484
break;
8585
}
8686
*dp++ = '\\';
8787
*dp++ = oct(((uint8_t)ch >> 6) & 0x07);
8888
*dp++ = oct(((uint8_t)ch >> 3) & 0x07);
8989
*dp++ = oct((uint8_t)ch & 0x07);
9090
} else {
91-
if (dp + 1 > dep) {
91+
if (dp + 1 - dsp > lim) {
9292
break;
9393
}
9494
*dp++ = ch;
9595
}
9696
}
97-
assert(dp <= dep);
97+
assert(dp - dsp <= lim);
9898
if (lim != INT_MAX) {
9999
assert(e->escaped == e->small);
100100
assert(dp + omitted_size <=

0 commit comments

Comments
 (0)