OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
269 // Special case - trailing ::. | 269 // Special case - trailing ::. |
270 addr_cursor = addr_end; | 270 addr_cursor = addr_end; |
271 } else { | 271 } else { |
272 while (*coloncounter) { | 272 while (*coloncounter) { |
273 if (*coloncounter == ':') { | 273 if (*coloncounter == ':') { |
274 ++coloncount; | 274 ++coloncount; |
275 } | 275 } |
276 ++coloncounter; | 276 ++coloncounter; |
277 } | 277 } |
278 // (coloncount + 1) is the number of shorts left in the address. | 278 // (coloncount + 1) is the number of shorts left in the address. |
| 279 // If this number is greater than the number of available shorts, the |
| 280 // address is malformed. |
| 281 if (coloncount + 1 > addr_end - addr_cursor) { |
| 282 return 0; |
| 283 } |
279 addr_cursor = addr_end - (coloncount + 1); | 284 addr_cursor = addr_end - (coloncount + 1); |
280 seencompressed = true; | 285 seencompressed = true; |
281 } | 286 } |
282 } else { | 287 } else { |
283 ++readcursor; | 288 ++readcursor; |
284 } | 289 } |
285 } else { | 290 } else { |
286 uint16_t word; | 291 uint16_t word; |
287 int bytesread = 0; | 292 int bytesread = 0; |
288 if (sscanf(readcursor, "%hx%n", &word, &bytesread) != 1) { | 293 if (sscanf(readcursor, "%4hx%n", &word, &bytesread) != 1) { |
289 return 0; | 294 return 0; |
290 } else { | 295 } else { |
291 *addr_cursor = HostToNetwork16(word); | 296 *addr_cursor = HostToNetwork16(word); |
292 ++addr_cursor; | 297 ++addr_cursor; |
293 readcursor += bytesread; | 298 readcursor += bytesread; |
294 if (*readcursor != ':' && *readcursor != '\0') { | 299 if (*readcursor != ':' && *readcursor != '\0') { |
295 return 0; | 300 return 0; |
296 } | 301 } |
297 } | 302 } |
298 } | 303 } |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
447 *level = *GetSidSubAuthority(til->Label.Sid, count - 1); | 452 *level = *GetSidSubAuthority(til->Label.Sid, count - 1); |
448 ret = true; | 453 ret = true; |
449 } | 454 } |
450 } | 455 } |
451 CloseHandle(token); | 456 CloseHandle(token); |
452 } | 457 } |
453 return ret; | 458 return ret; |
454 } | 459 } |
455 | 460 |
456 } // namespace rtc | 461 } // namespace rtc |
OLD | NEW |