File tree 2 files changed +96
-1
lines changed
2 files changed +96
-1
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ const IPv6RE = /^\[([^[\]]*)\]/;
12
12
const addrSplitRE = / ( ^ .+ ?) (?: : ( \d + ) ) ? $ / ;
13
13
const {
14
14
ERR_DNS_SET_SERVERS_FAILED ,
15
+ ERR_INVALID_ARG_TYPE ,
15
16
ERR_INVALID_IP_ADDRESS ,
16
17
ERR_INVALID_OPT_VALUE
17
18
} = errors . codes ;
@@ -37,13 +38,20 @@ class Resolver {
37
38
}
38
39
39
40
setServers ( servers ) {
41
+ if ( ! Array . isArray ( servers ) ) {
42
+ throw new ERR_INVALID_ARG_TYPE ( 'servers' , 'Array' , servers ) ;
43
+ }
44
+
40
45
// Cache the original servers because in the event of an error while
41
46
// setting the servers, c-ares won't have any servers available for
42
47
// resolution.
43
48
const orig = this . _handle . getServers ( ) ;
44
49
const newSet = [ ] ;
45
50
46
- servers . forEach ( ( serv ) => {
51
+ servers . forEach ( ( serv , index ) => {
52
+ if ( typeof serv !== 'string' ) {
53
+ throw new ERR_INVALID_ARG_TYPE ( `servers[${ index } ]` , 'string' , serv ) ;
54
+ }
47
55
var ipVersion = isIP ( serv ) ;
48
56
49
57
if ( ipVersion !== 0 )
Original file line number Diff line number Diff line change
1
+ 'use strict' ;
2
+ require ( '../common' ) ;
3
+ const { addresses } = require ( '../common/internet' ) ;
4
+ const assert = require ( 'assert' ) ;
5
+ const dns = require ( 'dns' ) ;
6
+ const resolver = new dns . promises . Resolver ( ) ;
7
+ const dnsPromises = dns . promises ;
8
+ const promiseResolver = new dns . promises . Resolver ( ) ;
9
+
10
+ {
11
+ [
12
+ null ,
13
+ undefined ,
14
+ Number ( addresses . DNS4_SERVER ) ,
15
+ addresses . DNS4_SERVER ,
16
+ {
17
+ address : addresses . DNS4_SERVER
18
+ }
19
+ ] . forEach ( ( val ) => {
20
+ const errObj = {
21
+ code : 'ERR_INVALID_ARG_TYPE' ,
22
+ name : 'TypeError [ERR_INVALID_ARG_TYPE]' ,
23
+ message : 'The "servers" argument must be of type Array. Received type ' +
24
+ typeof val
25
+ } ;
26
+ assert . throws (
27
+ ( ) => {
28
+ dns . setServers ( val ) ;
29
+ } , errObj
30
+ ) ;
31
+ assert . throws (
32
+ ( ) => {
33
+ resolver . setServers ( val ) ;
34
+ } , errObj
35
+ ) ;
36
+ assert . throws (
37
+ ( ) => {
38
+ dnsPromises . setServers ( val ) ;
39
+ } , errObj
40
+ ) ;
41
+ assert . throws (
42
+ ( ) => {
43
+ promiseResolver . setServers ( val ) ;
44
+ } , errObj
45
+ ) ;
46
+ } ) ;
47
+ }
48
+
49
+ {
50
+ [
51
+ [ null ] ,
52
+ [ undefined ] ,
53
+ [ Number ( addresses . DNS4_SERVER ) ] ,
54
+ [
55
+ {
56
+ address : addresses . DNS4_SERVER
57
+ }
58
+ ]
59
+ ] . forEach ( ( val ) => {
60
+ const errObj = {
61
+ code : 'ERR_INVALID_ARG_TYPE' ,
62
+ name : 'TypeError [ERR_INVALID_ARG_TYPE]' ,
63
+ message : 'The "servers[0]" argument must be of type string. ' +
64
+ `Received type ${ typeof val [ 0 ] } `
65
+ } ;
66
+ assert . throws (
67
+ ( ) => {
68
+ dns . setServers ( val ) ;
69
+ } , errObj
70
+ ) ;
71
+ assert . throws (
72
+ ( ) => {
73
+ resolver . setServers ( val ) ;
74
+ } , errObj
75
+ ) ;
76
+ assert . throws (
77
+ ( ) => {
78
+ dnsPromises . setServers ( val ) ;
79
+ } , errObj
80
+ ) ;
81
+ assert . throws (
82
+ ( ) => {
83
+ promiseResolver . setServers ( val ) ;
84
+ } , errObj
85
+ ) ;
86
+ } ) ;
87
+ }
You can’t perform that action at this time.
0 commit comments