Skip to content

Commit bb3e542

Browse files
committed
Reject domain parts longer than 63 bytes, fixes #787
1 parent f4a9433 commit bb3e542

File tree

5 files changed

+24
-6
lines changed

5 files changed

+24
-6
lines changed

Diff for: lib/isFQDN.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,11 @@ function isFQDN(str, options) {
3030
str = str.substring(0, str.length - 1);
3131
}
3232
var parts = str.split('.');
33+
for (var i = 0; i < parts.length; i++) {
34+
if (parts[i].length > 63) {
35+
return false;
36+
}
37+
}
3338
if (options.require_tld) {
3439
var tld = parts.pop();
3540
if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
@@ -40,8 +45,8 @@ function isFQDN(str, options) {
4045
return false;
4146
}
4247
}
43-
for (var part, i = 0; i < parts.length; i++) {
44-
part = parts[i];
48+
for (var part, _i = 0; _i < parts.length; _i++) {
49+
part = parts[_i];
4550
if (options.allow_underscores) {
4651
part = part.replace(/_/g, '');
4752
}

Diff for: src/lib/isFQDN.js

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ export default function isFQDN(str, options) {
1616
str = str.substring(0, str.length - 1);
1717
}
1818
const parts = str.split('.');
19+
for (let i = 0; i < parts.length; i++) {
20+
if (parts[i].length > 63) {
21+
return false;
22+
}
23+
}
1924
if (options.require_tld) {
2025
const tld = parts.pop();
2126
if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {

Diff for: test/validators.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ describe('Validators', function () {
5757
'"foobar"@example.com',
5858
'" foo m端ller "@example.com',
5959
'"foo\\@bar"@example.com',
60-
`${repeat('a', 64)}@${repeat('a', 250)}.com`,
60+
`${repeat('a', 64)}@${repeat('a', 63)}.com`,
61+
`${repeat('a', 64)}@${repeat('a', 63)}.${repeat('a', 63)}.${repeat('a', 63)}.${repeat('a', 58)}.com`,
62+
`${repeat('a', 64)}@${repeat('a', 63)}.com`,
6163
],
6264
invalid: [
6365
'invalidemail@',
@@ -70,6 +72,7 @@ describe('Validators', function () {
7072
'gmailgmailgmailgmailgmail@gmail.com',
7173
`${repeat('a', 64)}@${repeat('a', 251)}.com`,
7274
`${repeat('a', 65)}@${repeat('a', 250)}.com`,
75+
`${repeat('a', 64)}@${repeat('a', 64)}.com`,
7376
7477
7578

Diff for: validator.js

+7-2
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,11 @@ function isFQDN(str, options) {
139139
str = str.substring(0, str.length - 1);
140140
}
141141
var parts = str.split('.');
142+
for (var i = 0; i < parts.length; i++) {
143+
if (parts[i].length > 63) {
144+
return false;
145+
}
146+
}
142147
if (options.require_tld) {
143148
var tld = parts.pop();
144149
if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
@@ -149,8 +154,8 @@ function isFQDN(str, options) {
149154
return false;
150155
}
151156
}
152-
for (var part, i = 0; i < parts.length; i++) {
153-
part = parts[i];
157+
for (var part, _i = 0; _i < parts.length; _i++) {
158+
part = parts[_i];
154159
if (options.allow_underscores) {
155160
part = part.replace(/_/g, '');
156161
}

Diff for: validator.min.js

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)