Skip to content

Commit d7f16a2

Browse files
authored
Accept zero-padded segments in IPv6 addresses (#4367)
1 parent a5c0d35 commit d7f16a2

File tree

2 files changed

+11
-32
lines changed

2 files changed

+11
-32
lines changed

lib/cloud_controller/rule_validator.rb

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ def self.no_leading_zeros(destination)
9999
private_class_method def self.no_leading_zeros_in_address(address)
100100
return no_leading_zeros_in_ipv4_address(address) if address.include?('.')
101101

102-
no_leading_zeros_in_ipv6_address(address) if address.include?(':')
102+
# return true for IPv6 addresses, as leading zeros are allowed
103+
true
103104
end
104105

105106
private_class_method def self.no_leading_zeros_in_ipv4_address(address)
@@ -115,19 +116,6 @@ def self.no_leading_zeros(destination)
115116
true
116117
end
117118

118-
private_class_method def self.no_leading_zeros_in_ipv6_address(address)
119-
address.split(':').each do |segment|
120-
next unless segment.start_with?('0') && segment.length > 1
121-
122-
segment_parts = segment.split('/')
123-
return false if segment_parts.length < 2
124-
125-
return false if segment_parts[0].length > 1 && segment_parts[0].start_with?('0')
126-
end
127-
128-
true
129-
end
130-
131119
private_class_method def self.parse_ipv4(val)
132120
if val.is_a?(Array)
133121
val.map do |ip|

spec/unit/messages/validators/security_group_rule_validator_spec.rb

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ def self.name
655655
end
656656
end
657657

658-
context 'when there is a leading zero in an octet' do
658+
context 'when there is a leading zero in a segment' do
659659
context 'in a CIDR' do
660660
let(:rules) do
661661
[
@@ -672,10 +672,8 @@ def self.name
672672
]
673673
end
674674

675-
it 'is not valid' do
676-
expect(subject).not_to be_valid
677-
expect(subject.errors.full_messages).to include 'Rules[0]: destination octets cannot contain leading zeros'
678-
expect(subject.errors.full_messages).to include 'Rules[1]: destination octets cannot contain leading zeros'
675+
it 'is valid' do
676+
expect(subject).to be_valid
679677
end
680678
end
681679

@@ -690,9 +688,8 @@ def self.name
690688
]
691689
end
692690

693-
it 'is not valid' do
694-
expect(subject).not_to be_valid
695-
expect(subject.errors.full_messages).to include 'Rules[0]: destination octets cannot contain leading zeros'
691+
it 'is valid' do
692+
expect(subject).to be_valid
696693
end
697694
end
698695

@@ -727,14 +724,8 @@ def self.name
727724
]
728725
end
729726

730-
it 'is not valid' do
731-
expect(subject).not_to be_valid
732-
expect(subject.errors.full_messages.length).to eq(5)
733-
expect(subject.errors.full_messages).to include 'Rules[0]: destination octets cannot contain leading zeros'
734-
expect(subject.errors.full_messages).to include 'Rules[1]: destination octets cannot contain leading zeros'
735-
expect(subject.errors.full_messages).to include 'Rules[2]: destination octets cannot contain leading zeros'
736-
expect(subject.errors.full_messages).to include 'Rules[3]: destination octets cannot contain leading zeros'
737-
expect(subject.errors.full_messages).to include 'Rules[4]: destination octets cannot contain leading zeros'
727+
it 'is valid' do
728+
expect(subject).to be_valid
738729
end
739730
end
740731
end
@@ -914,15 +905,15 @@ def self.name
914905
[
915906
{
916907
protocol: 'udp',
917-
destination: '2001:db8::1-2001:db8::g,2001:db8::/129,2001:db8:0000::/32,2001:db8::ff-2001:db8::1',
908+
destination: '2001:db8::1-2001:db8::g,2001:db8::/129,2001:db8::ff-2001:db8::1',
918909
ports: '8080'
919910
}
920911
]
921912
end
922913

923914
it 'throws an error for every destination' do
924915
expect(subject).not_to be_valid
925-
expect(subject.errors.full_messages.length).to equal(4)
916+
expect(subject.errors.full_messages.length).to equal(3)
926917
expect(subject.errors.full_messages).to include 'Rules[0]: destination must contain valid CIDR(s), IP address(es), or IP address range(s)'
927918
expect(subject.errors.full_messages).to include 'Rules[0]: destination IP address range is invalid'
928919

0 commit comments

Comments
 (0)