websocket-driver 0.8.0-java → 0.8.2-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d80d130ef14404b970ec6a87d025d02b10c7be7caa4359cd6c69cd272835366b
4
- data.tar.gz: 2baea5897642cf2fb7849467c3bbfcfc56719e67878c7141b1942a107ebb4389
3
+ metadata.gz: 7d6d129506c5f64f0e817c657333d7147b67a23b6a8ede8c3937721ea273d075
4
+ data.tar.gz: 83edb9b00c6e73454395dae194dbc61aa38a56b733047bd73e8583e3f5eb2993
5
5
  SHA512:
6
- metadata.gz: ae63f5fb7bd77c6cace3e104188cfdecd5c14ee695dfae034e0e9b671de4acde5199112d73ab04e019b9fdf94f322f06f99990a0b25c6c2772b254e93b093bb1
7
- data.tar.gz: 6f2223f6719ae08a3672656fe97a2263dfb0bfc8e206c1fe58f59627562fce257b49a51b71ee330effe03b9b627b84157839d47a312c8725a3d5d6ca1a250961
6
+ metadata.gz: 77feafd684bc01a1ec797ed707878f15410b3f8cc5c824c36563a33f8cc7d2a8f3876a2a7f839ed840e7c024f615e91523f54be872abcfcf6ab591cb5dfb1433
7
+ data.tar.gz: ee9de4c1c644f4d401782bd32f580c07d17fd8993efba55b3936d00aaa1881c029e1ef469eb935a96dd75a84ccc42180392dae91ea4cd898fc18281dc875009b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ### 0.8.2 / 2026-06-23
2
+
3
+ - Gracefully handle malformed `Host` headers in the `Server` driver
4
+
5
+ ### 0.8.1 / 2026-06-04
6
+
7
+ - Close a draft-75/76 connection if a length header grows to exceed the
8
+ configured max length
9
+ - Fail the connection if a message is larger than the configured max length
10
+ after extension processing
11
+ - Limit the total HTTP request line and headers size to 32K
12
+
1
13
  ### 0.8.0 / 2025-05-25
2
14
 
3
15
  - Emit binary message as a string with `Encoding::BINARY` instead of an array
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2010-2025 James Coglan
1
+ Copyright 2010-2026 James Coglan
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License"); you may not use
4
4
  this file except in compliance with the License. You may obtain a copy of the
@@ -41,6 +41,7 @@ module WebSocket
41
41
 
42
42
  when 1 then
43
43
  @length = (octet & 0x7F) + 128 * @length
44
+ return close if @length > @max_length
44
45
 
45
46
  if @closing and @length.zero?
46
47
  return close
@@ -400,6 +400,10 @@ module WebSocket
400
400
 
401
401
  payload = message.data
402
402
 
403
+ if payload.bytesize > @max_length
404
+ return fail(:too_large, 'WebSocket frame length too large')
405
+ end
406
+
403
407
  case message.opcode
404
408
  when OPCODES[:text] then
405
409
  payload = Driver.encode(payload, Encoding::UTF_8)
@@ -2,7 +2,7 @@ module WebSocket
2
2
  module HTTP
3
3
 
4
4
  module Headers
5
- MAX_LINE_LENGTH = 4096
5
+ MAX_REQUEST_SIZE = 32768
6
6
  CR = 0x0D
7
7
  LF = 0x0A
8
8
 
@@ -38,6 +38,7 @@ module WebSocket
38
38
  attr_reader :headers
39
39
 
40
40
  def initialize
41
+ @size = 0
41
42
  @buffer = []
42
43
  @env = {}
43
44
  @headers = {}
@@ -54,6 +55,9 @@ module WebSocket
54
55
 
55
56
  def parse(chunk)
56
57
  chunk.each_byte do |octet|
58
+ @size += 1
59
+ return error if @size > MAX_REQUEST_SIZE
60
+
57
61
  if octet == LF and @stage < 2
58
62
  @buffer.pop if @buffer.last == CR
59
63
  if @buffer.empty?
@@ -71,9 +75,8 @@ module WebSocket
71
75
  end
72
76
  end
73
77
  @buffer = []
74
- else
75
- @buffer << octet if @stage >= 0
76
- error if @stage < 2 and @buffer.size > MAX_LINE_LENGTH
78
+ elsif @stage >= 0
79
+ @buffer << octet
77
80
  end
78
81
  end
79
82
  @env['rack.input'] = StringIO.new(string_buffer)
@@ -33,11 +33,18 @@ module WebSocket
33
33
  rack_name = "HTTP_#{ rack_name }" unless RESERVED_HEADERS.include?(name)
34
34
  @env[rack_name] = value
35
35
  end
36
- if host = @env['HTTP_HOST']
37
- uri = URI.parse("http://#{ host }")
38
- @env['SERVER_NAME'] = uri.host
39
- @env['SERVER_PORT'] = uri.port.to_s
40
- end
36
+
37
+ set_server_vars
38
+ end
39
+
40
+ def set_server_vars
41
+ return unless host = @env['HTTP_HOST']
42
+
43
+ uri = URI.parse("http://#{ host }")
44
+ @env['SERVER_NAME'] = uri.host
45
+ @env['SERVER_PORT'] = uri.port.to_s
46
+ rescue URI::InvalidURIError
47
+ error
41
48
  end
42
49
  end
43
50
 
Binary file
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: websocket-driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.2
5
5
  platform: java
6
6
  authors:
7
7
  - James Coglan
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-05-25 00:00:00.000000000 Z
10
+ date: 2026-06-23 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: base64