Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: net/base/dns_util.cc

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/base/dns_util.h" 5 #include "net/base/dns_util.h"
6 6
7 #include <cstring> 7 #include <cstring>
8 8
9 namespace net { 9 namespace net {
10 10
11 // Based on DJB's public domain code. 11 // Based on DJB's public domain code.
12 bool DNSDomainFromDot(const base::StringPiece& dotted, std::string* out) { 12 bool DNSDomainFromDot(const base::StringPiece& dotted, std::string* out) {
13 const char* buf = dotted.data(); 13 const char* buf = dotted.data();
14 unsigned n = dotted.size(); 14 unsigned n = dotted.size();
15 char label[63]; 15 char label[63];
16 unsigned int labellen = 0; /* <= sizeof label */ 16 size_t labellen = 0; /* <= sizeof label */
17 char name[255]; 17 char name[255];
18 unsigned int namelen = 0; /* <= sizeof name */ 18 size_t namelen = 0; /* <= sizeof name */
19 char ch; 19 char ch;
20 20
21 for (;;) { 21 for (;;) {
22 if (!n) 22 if (!n)
23 break; 23 break;
24 ch = *buf++; 24 ch = *buf++;
25 --n; 25 --n;
26 if (ch == '.') { 26 if (ch == '.') {
27 if (labellen) { 27 if (labellen) {
28 if (namelen + labellen + 1 > sizeof name) 28 if (namelen + labellen + 1 > sizeof name)
29 return false; 29 return false;
30 name[namelen++] = labellen; 30 name[namelen++] = static_cast<char>(labellen);
31 memcpy(name + namelen, label, labellen); 31 memcpy(name + namelen, label, labellen);
32 namelen += labellen; 32 namelen += labellen;
33 labellen = 0; 33 labellen = 0;
34 } 34 }
35 continue; 35 continue;
36 } 36 }
37 if (labellen >= sizeof label) 37 if (labellen >= sizeof label)
38 return false; 38 return false;
39 label[labellen++] = ch; 39 label[labellen++] = ch;
40 } 40 }
41 41
42 if (labellen) { 42 if (labellen) {
43 if (namelen + labellen + 1 > sizeof name) 43 if (namelen + labellen + 1 > sizeof name)
44 return false; 44 return false;
45 name[namelen++] = labellen; 45 name[namelen++] = static_cast<char>(labellen);
46 memcpy(name + namelen, label, labellen); 46 memcpy(name + namelen, label, labellen);
47 namelen += labellen; 47 namelen += labellen;
48 labellen = 0; 48 labellen = 0;
49 } 49 }
50 50
51 if (namelen + 1 > sizeof name) 51 if (namelen + 1 > sizeof name)
52 return false; 52 return false;
53 if (namelen == 0) // Empty names e.g. "", "." are not valid. 53 if (namelen == 0) // Empty names e.g. "", "." are not valid.
54 return false; 54 return false;
55 name[namelen++] = 0; // This is the root label (of length 0). 55 name[namelen++] = 0; // This is the root label (of length 0).
(...skipping 27 matching lines...) Expand all
83 std::string TrimEndingDot(const base::StringPiece& host) { 83 std::string TrimEndingDot(const base::StringPiece& host) {
84 base::StringPiece host_trimmed = host; 84 base::StringPiece host_trimmed = host;
85 size_t len = host_trimmed.length(); 85 size_t len = host_trimmed.length();
86 if (len > 1 && host_trimmed[len - 1] == '.') { 86 if (len > 1 && host_trimmed[len - 1] == '.') {
87 host_trimmed.remove_suffix(1); 87 host_trimmed.remove_suffix(1);
88 } 88 }
89 return host_trimmed.as_string(); 89 return host_trimmed.as_string();
90 } 90 }
91 91
92 } // namespace net 92 } // namespace net
OLDNEW
« no previous file with comments | « net/android/network_change_notifier_delegate_android.cc ('k') | net/base/elements_upload_data_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698