Mercurial > hg > nginx-quic
comparison src/http/ngx_http_parse_time.c @ 44:0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 09 Jan 2003 05:36:00 +0000 |
parents | 6a0b3d6e9c13 |
children | a499e0d1f16e |
comparison
equal
deleted
inserted
replaced
43:53cd05892261 | 44:0e81ac0bb3e2 |
---|---|
19 | 19 |
20 fmt = 0; | 20 fmt = 0; |
21 end = value + len; | 21 end = value + len; |
22 | 22 |
23 for (p = value; p < end; p++) { | 23 for (p = value; p < end; p++) { |
24 if (*p == ',') | 24 if (*p == ',') { |
25 break; | 25 break; |
26 } | |
26 | 27 |
27 if (*p == ' ') { | 28 if (*p == ' ') { |
28 fmt = isoc; | 29 fmt = isoc; |
29 break; | 30 break; |
30 } | 31 } |
31 } | 32 } |
32 | 33 |
33 for (p++; p < end; p++) | 34 for (p++; p < end; p++) |
34 if (*p != ' ') | 35 if (*p != ' ') { |
35 break; | 36 break; |
36 | 37 } |
37 if (end - p < 18) | 38 |
38 return NGX_ERROR; | 39 if (end - p < 18) { |
40 return NGX_ERROR; | |
41 } | |
39 | 42 |
40 if (fmt != isoc) { | 43 if (fmt != isoc) { |
41 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') | 44 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') { |
42 return NGX_ERROR; | 45 return NGX_ERROR; |
46 } | |
43 | 47 |
44 day = (*p - '0') * 10 + *(p + 1) - '0'; | 48 day = (*p - '0') * 10 + *(p + 1) - '0'; |
45 p += 2; | 49 p += 2; |
46 | 50 |
47 if (*p == ' ') { | 51 if (*p == ' ') { |
48 if (end - p < 18) | 52 if (end - p < 18) { |
49 return NGX_ERROR; | 53 return NGX_ERROR; |
54 } | |
50 fmt = rfc822; | 55 fmt = rfc822; |
51 | 56 |
52 } else if (*p == '-') { | 57 } else if (*p == '-') { |
53 fmt = rfc850; | 58 fmt = rfc850; |
54 | 59 |
97 return NGX_ERROR; | 102 return NGX_ERROR; |
98 } | 103 } |
99 | 104 |
100 p += 3; | 105 p += 3; |
101 | 106 |
102 if ((fmt == rfc822 && *p != ' ') || (fmt == rfc850 && *p != '-')) | 107 if ((fmt == rfc822 && *p != ' ') || (fmt == rfc850 && *p != '-')) { |
103 return NGX_ERROR; | 108 return NGX_ERROR; |
109 } | |
104 | 110 |
105 p++; | 111 p++; |
106 | 112 |
107 if (fmt == rfc822) { | 113 if (fmt == rfc822) { |
108 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9' | 114 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9' |
109 || *(p + 2) < '0' || *(p + 2) > '9' | 115 || *(p + 2) < '0' || *(p + 2) > '9' |
110 || *(p + 3) < '0' || *(p + 3) > '9') | 116 || *(p + 3) < '0' || *(p + 3) > '9') |
111 return NGX_ERROR; | 117 { |
118 return NGX_ERROR; | |
119 } | |
112 | 120 |
113 year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100 | 121 year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100 |
114 + (*(p + 2) - '0') * 10 + *(p + 3) - '0'; | 122 + (*(p + 2) - '0') * 10 + *(p + 3) - '0'; |
115 p += 4; | 123 p += 4; |
116 | 124 |
117 } else if (fmt == rfc850) { | 125 } else if (fmt == rfc850) { |
118 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') | 126 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') { |
119 return NGX_ERROR; | 127 return NGX_ERROR; |
128 } | |
120 | 129 |
121 year = (*p - '0') * 10 + *(p + 1) - '0'; | 130 year = (*p - '0') * 10 + *(p + 1) - '0'; |
122 year += (year < 70) ? 2000 : 1900; | 131 year += (year < 70) ? 2000 : 1900; |
123 p += 2; | 132 p += 2; |
124 } | 133 } |
125 | 134 |
126 if (fmt == isoc) { | 135 if (fmt == isoc) { |
127 if (*p == ' ') | 136 if (*p == ' ') { |
128 p++; | 137 p++; |
129 | 138 } |
130 if (*p < '0' || *p > '9') | 139 |
131 return NGX_ERROR; | 140 if (*p < '0' || *p > '9') { |
141 return NGX_ERROR; | |
142 } | |
132 | 143 |
133 day = *p++ - '0'; | 144 day = *p++ - '0'; |
134 | 145 |
135 if (*p != ' ') { | 146 if (*p != ' ') { |
136 if (*p < '0' || *p > '9') | 147 if (*p < '0' || *p > '9') { |
137 return NGX_ERROR; | 148 return NGX_ERROR; |
149 } | |
138 | 150 |
139 day = day * 10 + *p++ - '0'; | 151 day = day * 10 + *p++ - '0'; |
140 } | 152 } |
141 | 153 |
142 if (end - p < 14) | 154 if (end - p < 14) { |
143 return NGX_ERROR; | 155 return NGX_ERROR; |
144 } | 156 } |
145 | 157 } |
146 if (*p++ != ' ') | 158 |
147 return NGX_ERROR; | 159 if (*p++ != ' ') { |
148 | 160 return NGX_ERROR; |
149 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') | 161 } |
150 return NGX_ERROR; | 162 |
163 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') { | |
164 return NGX_ERROR; | |
165 } | |
151 | 166 |
152 hour = (*p - '0') * 10 + *(p + 1) - '0'; | 167 hour = (*p - '0') * 10 + *(p + 1) - '0'; |
153 p += 2; | 168 p += 2; |
154 | 169 |
155 if (*p++ != ':') | 170 if (*p++ != ':') { |
156 return NGX_ERROR; | 171 return NGX_ERROR; |
157 | 172 } |
158 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') | 173 |
159 return NGX_ERROR; | 174 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') { |
175 return NGX_ERROR; | |
176 } | |
160 | 177 |
161 min = (*p - '0') * 10 + *(p + 1) - '0'; | 178 min = (*p - '0') * 10 + *(p + 1) - '0'; |
162 p += 2; | 179 p += 2; |
163 | 180 |
164 if (*p++ != ':') | 181 if (*p++ != ':') { |
165 return NGX_ERROR; | 182 return NGX_ERROR; |
166 | 183 } |
167 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') | 184 |
168 return NGX_ERROR; | 185 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9') { |
186 return NGX_ERROR; | |
187 } | |
169 | 188 |
170 sec = (*p - '0') * 10 + *(p + 1) - '0'; | 189 sec = (*p - '0') * 10 + *(p + 1) - '0'; |
171 | 190 |
172 if (fmt == isoc) { | 191 if (fmt == isoc) { |
173 p += 2; | 192 p += 2; |
174 | 193 |
175 if (*p++ != ' ') | 194 if (*p++ != ' ') { |
176 return NGX_ERROR; | 195 return NGX_ERROR; |
196 } | |
177 | 197 |
178 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9' | 198 if (*p < '0' || *p > '9' || *(p + 1) < '0' || *(p + 1) > '9' |
179 || *(p + 2) < '0' || *(p + 2) > '9' | 199 || *(p + 2) < '0' || *(p + 2) > '9' |
180 || *(p + 3) < '0' || *(p + 3) > '9') | 200 || *(p + 3) < '0' || *(p + 3) > '9') |
181 return NGX_ERROR; | 201 { |
202 return NGX_ERROR; | |
203 } | |
182 | 204 |
183 year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100 | 205 year = (*p - '0') * 1000 + (*(p + 1) - '0') * 100 |
184 + (*(p + 2) - '0') * 10 + *(p + 3) - '0'; | 206 + (*(p + 2) - '0') * 10 + *(p + 3) - '0'; |
185 } | 207 } |
186 | 208 |
187 #if 0 | 209 #if 0 |
188 printf("%d.%d.%d %d:%d:%d\n", day, month + 1, year, hour, min, sec); | 210 printf("%d.%d.%d %d:%d:%d\n", day, month + 1, year, hour, min, sec); |
189 #endif | 211 #endif |
190 | 212 |
191 if (hour > 23 || min > 59 || sec > 59) | 213 if (hour > 23 || min > 59 || sec > 59) { |
192 return NGX_ERROR; | 214 return NGX_ERROR; |
215 } | |
193 | 216 |
194 if (day == 29 && month == 1) { | 217 if (day == 29 && month == 1) { |
195 if ((year & 3) || ((year % 100 == 0) && (year % 400) != 0)) | 218 if ((year & 3) || ((year % 100 == 0) && (year % 400) != 0)) { |
196 return NGX_ERROR; | 219 return NGX_ERROR; |
220 } | |
197 | 221 |
198 } else if (day > mday[month]) { | 222 } else if (day > mday[month]) { |
199 return NGX_ERROR; | 223 return NGX_ERROR; |
200 } | 224 } |
201 | 225 |
202 if (sizeof(time_t) <= 4 && year >= 2038) | 226 if (sizeof(time_t) <= 4 && year >= 2038) { |
203 return NGX_ERROR; | 227 return NGX_ERROR; |
228 } | |
204 | 229 |
205 /* shift new year to 1st March, needed for Gauss's formula */ | 230 /* shift new year to 1st March, needed for Gauss's formula */ |
206 if (--month <= 0) { | 231 if (--month <= 0) { |
207 month += 12; | 232 month += 12; |
208 year -= 1; | 233 year -= 1; |