Skip to content

Commit 9a5fd1b

Browse files
committed
In case of buffer overflow create an event with a slice of the data and tag the event with an error
1 parent 0b80d1e commit 9a5fd1b

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

lib/logstash/codecs/json_lines.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,13 @@ def decode(data, &block)
6969
@buffer.extract(data).each do |line|
7070
parse_json(@converter.convert(line), &block)
7171
end
72+
rescue java.lang.IllegalStateException => e
73+
if e.message == "input buffer full" && @decode_size_limit_bytes != "none"
74+
yield event_factory.new_event("message" => data[0..@decode_size_limit_bytes.to_i - 1], "tags" => ["_jsonparsetoobigfailure"]) #TODO check the failure tag
75+
else
76+
# re-raise the error if doesn't correspond to the buffer overflow condition
77+
raise e
78+
end
7279
end
7380

7481
def encode(event)

spec/codecs/json_lines_spec.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@
128128
}.not_to raise_error
129129
end
130130

131+
it "should raise an error if the max bytes are exceeded" do
132+
subject.decode(maximum_payload << "z") do |event|
133+
expect(event.get("tags")).to include("_jsonparsetoobigfailure")
134+
expect(event.get("message").size).to eq(decode_size_limit_bytes)
135+
end
136+
end
137+
131138
it "should raise an error if the max bytes are exceeded" do
132139
subject.decode(maximum_payload << "z") do |event|
133140
expect(event.get("tags")).to include("_jsonparse_too_big_failure")

0 commit comments

Comments
 (0)