Skip to content

Commit cbe054e

Browse files
committed
Fix serialization of ServerName extension for empty server_name
1 parent dd723bb commit cbe054e

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

lib/raiha/tls/handshake/extension/server_name.rb

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ def extension_data=(data)
3333
end
3434

3535
def serialize
36-
server_name = [0].pack("C") + # host_name(0)
37-
[@server_name.bytesize].pack("n") + @server_name # HostName
38-
server_name_list = [server_name.bytesize].pack("n") + server_name
39-
[EXTENSION_TYPE_NUMBER].pack("n") + [server_name_list.bytesize].pack("n") + server_name_list
36+
if @server_name.nil? || @server_name.empty?
37+
# On EncryptedExtensions, the server_name is empty
38+
[EXTENSION_TYPE_NUMBER].pack("n") + [0].pack("n")
39+
else
40+
server_name = [0].pack("C") + # host_name(0)
41+
[@server_name.bytesize].pack("n") + @server_name # HostName
42+
server_name_list = [server_name.bytesize].pack("n") + server_name
43+
[EXTENSION_TYPE_NUMBER].pack("n") + [server_name_list.bytesize].pack("n") + server_name_list
44+
end
4045
end
4146
end
4247
end

test/raiha/tls/handshake/extension/server_name_test.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ class RaihaTLSHandshakeExtensionServerNameTest < Minitest::Test
1111
00 00 00 0f 00 0d 00 00 0a 67 6f 6f 67 6c 65 2e
1212
63 6f 6d
1313
DATA
14+
15+
TLS13_SERVER_NAME_EXTENSION_DATA_EMPTY = [<<~DATA.gsub(/[[:space:]]/, '')].pack("H*")
16+
00 00 00 00
17+
DATA
1418
def test_serialize
1519
www_example_com = Raiha::TLS::Handshake::Extension::ServerName.new(on: :client_hello)
1620
www_example_com.server_name = "www.example.com"
@@ -19,5 +23,8 @@ def test_serialize
1923
google_com = Raiha::TLS::Handshake::Extension::ServerName.new(on: :client_hello)
2024
google_com.server_name = "google.com"
2125
assert_equal TLS13_SERVER_NAME_EXTENSION_DATA_GOOGLE_COM, google_com.serialize
26+
27+
empty = Raiha::TLS::Handshake::Extension::ServerName.new(on: :encrypted_extensions)
28+
assert_equal TLS13_SERVER_NAME_EXTENSION_DATA_EMPTY, empty.serialize
2229
end
2330
end

0 commit comments

Comments
 (0)