Skip to content

Commit 1228cea

Browse files
committed
* Buffer.new -> Buffer.of_size
* introduced Buffer.from_string
1 parent fa1e440 commit 1228cea

File tree

2 files changed

+16
-8
lines changed

2 files changed

+16
-8
lines changed

lib/buffer.rb

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,19 @@ class Buffer
77
class Error < RuntimeError; end
88
class EOF < Error; end
99

10-
def initialize(size)
10+
def self.from_string(str)
11+
new(str)
12+
end
13+
14+
def self.of_size(size)
1115
raise ArgumentError if size < 0
16+
new('#' * size)
17+
end
1218

13-
@size = size
19+
def initialize(content)
20+
@size = content.size
21+
@content = content
1422
@position = 0
15-
@content = "#" * @size
1623
end
1724

1825
def size
@@ -58,10 +65,11 @@ def copy_from_stream(stream, n)
5865
write(str)
5966
n -= str.size
6067
end
68+
raise if n < 0
6169
end
6270

6371
def write_cstring(cstr)
64-
raise ArgumentError, "Invalid Ruby/cstring" if cstr.include?("\000")
72+
raise ArgumentError, "Invalid Ruby/cstring" if cstr.include?(0)
6573
write(cstr)
6674
write("\000")
6775
end

lib/postgres-pr/message.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def self.read(stream, startup=false)
3434
raise ParseError unless length >= 4
3535

3636
# initialize buffer
37-
buffer = Buffer.new(startup ? length : 1+length)
37+
buffer = Buffer.of_size(startup ? length : 1+length)
3838
buffer.write_byte(type) unless startup
3939
buffer.write_int32_network(length)
4040
buffer.copy_from_stream(stream, length-4)
@@ -53,7 +53,7 @@ def self.dump(*args)
5353
end
5454

5555
def dump(body_size=0)
56-
buffer = Buffer.new(5 + body_size)
56+
buffer = Buffer.of_size(5 + body_size)
5757
buffer.write_byte(self.message_type)
5858
buffer.write_int32_network(4 + body_size)
5959
yield buffer if block_given?
@@ -462,7 +462,7 @@ class StartupMessage < Message
462462
def dump
463463
sz = @params.inject(4 + 4) {|sum, kv| sum + kv[0].size + 1 + kv[1].size + 1} + 1
464464

465-
buffer = Buffer.new(sz)
465+
buffer = Buffer.of_size(sz)
466466
buffer.write_int32_network(sz)
467467
buffer.write_int32_network(@proto_version)
468468
@params.each_pair {|key, value|
@@ -498,7 +498,7 @@ class SSLRequest < Message
498498

499499
def dump
500500
sz = 4 + 4
501-
buffer = Buffer.new(sz)
501+
buffer = Buffer.of_size(sz)
502502
buffer.write_int32_network(sz)
503503
buffer.write_int32_network(@ssl_request_code)
504504
raise DumpError unless buffer.at_end?

0 commit comments

Comments
 (0)