Skip to content

Commit a536ba6

Browse files
committed
Ignore empty strings when feeding buffers
Fix: #345
1 parent 96b21a4 commit a536ba6

3 files changed

Lines changed: 19 additions & 1 deletion

File tree

ChangeLog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
* Fix a regression where feeding an empty string to an Unpacker would be considered like the end of the buffer.
2+
13
2023-05-19 1.7.1:
24

35
* Fix JRuby 9.4 compatibility.

ext/msgpack/buffer.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,9 @@ static inline size_t msgpack_buffer_append_string(msgpack_buffer_t* b, VALUE str
268268
static inline size_t msgpack_buffer_append_string_reference(msgpack_buffer_t* b, VALUE string)
269269
{
270270
size_t length = RSTRING_LEN(string);
271-
_msgpack_buffer_append_long_string(b, string);
271+
if (length > 0) {
272+
_msgpack_buffer_append_long_string(b, string);
273+
}
272274
return length;
273275
}
274276

spec/unpacker_spec.rb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,20 @@ def flush
188188
objects.should == [sample_object] * 4
189189
end
190190

191+
it 'feed and each empty string' do
192+
raw = sample_object.to_msgpack.to_s
193+
objects = []
194+
195+
unpacker.feed("")
196+
unpacker.feed(raw)
197+
unpacker.feed("")
198+
199+
unpacker.each { |c|
200+
objects << c
201+
}
202+
objects.should == [sample_object]
203+
end
204+
191205
it 'feed_each continues internal state' do
192206
raw = sample_object.to_msgpack.to_s * 4
193207
objects = []

0 commit comments

Comments
 (0)