-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathntpd-bug2145.patch
More file actions
89 lines (85 loc) · 2.18 KB
/
ntpd-bug2145.patch
File metadata and controls
89 lines (85 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
--- ntp_control.c 2012-09-03 19:02:44.000000000 +0800
+++ ntp_control_new.c 2013-04-19 21:15:50.000000000 +0800
@@ -1843,41 +1843,66 @@
break;
case CS_VARLIST:
- snprintf(str, sizeof(str), "%s=\"",
- sys_var[CS_VARLIST].text);
- ctl_putdata(str, strlen(str), TRUE);
-
- firstvarname = TRUE;
- for (k = sys_var; !(EOV & k->flags); k++) {
- if (PADDING & k->flags)
+ {
+ char buf[CTL_MAX_DATA_LEN];
+ //buffPointer, firstElementPointer, buffEndPointer
+ register char *buffp, *buffend;
+ register int firstVarName;
+ register const char *ss;
+ register int len;
+ register struct ctl_var *k;
+
+ buffp = buf;
+ buffend = buf + sizeof(buf);
+ if (buffp + strlen(sys_var[CS_VARLIST].text) + 4 > buffend)
+ break; /* really long var name */
+
+ snprintf(buffp, sizeof(buf), "%s=\"",sys_var[CS_VARLIST].text);
+ buffp += strlen(buffp);
+ firstVarName = TRUE;
+ for (k = sys_var; !(k->flags & EOV); k++) {
+ if (k->flags & PADDING)
continue;
len = strlen(k->text);
- if (0 == len)
- continue;
- if (!firstvarname)
- ctl_putdata(",", 1, TRUE);
+ if (buffp+len+1 >= buffend)
+ break;
+ if (!firstVarName)
+ *buffp++ = ',';
else
- firstvarname = FALSE;
- ctl_putdata(k->text, len, TRUE);
+ firstVarName = FALSE;
+ memcpy(buffp, k->text, len);
+ buffp += len;
}
- for (k = ext_sys_var; k && !(EOV & k->flags); k++) {
- if (PADDING & k->flags)
+ for (k = ext_sys_var; k && !(k->flags & EOV); k++) {
+ if (k->flags & PADDING)
continue;
if (NULL == k->text)
continue;
- ss = strchr(k->text, '=');
+ ss = strchr(k->text,'=');
if (NULL == ss)
len = strlen(k->text);
else
len = ss - k->text;
- ctl_putdata(",", 1, TRUE);
- ctl_putdata(k->text, len, TRUE);
+ if (buffp + len + 1 >= buffend)
+ break;
+ if (firstVarName) {
+ *buffp++ = ',';
+ firstVarName = FALSE;
+ }
+ memcpy(buffp, k->text,(unsigned)len);
+ buffp += len;
}
+ if (buffp+2 >= buffend)
+ break;
- ctl_putdata("\"", 1, TRUE);
- break;
+ *buffp++ = '"';
+ *buffp = '\0';
+ ctl_putdata(buf, (unsigned)( buffp - buf ), 0);
+ break;
+ }
+
case CS_TAI:
if (sys_tai > 0)
ctl_putuint(sys_var[CS_TAI].text, sys_tai);