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;