From dd9f2403f43bcb93da5908ddde57d8c0491bb4c2 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Fri, 18 Oct 2019 22:53:25 -0400 Subject: [PATCH] 15699: Fix fencepost error at end of stream. refs #15699 Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- sdk/ruby/lib/arvados/collection.rb | 2 +- sdk/ruby/test/test_collection.rb | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/sdk/ruby/lib/arvados/collection.rb b/sdk/ruby/lib/arvados/collection.rb index 29c7663f7b..e29deba6c9 100644 --- a/sdk/ruby/lib/arvados/collection.rb +++ b/sdk/ruby/lib/arvados/collection.rb @@ -207,7 +207,7 @@ module Arv loop do ii = (lo + hi) / 2 range = @ranges[ii] - if range.include?(target) && (target < range.end || ii == hi) + if range.include?(target) && (target < range.end || ii == hi-1) return ii elsif ii == lo raise RangeError.new("%i not in segment" % target) diff --git a/sdk/ruby/test/test_collection.rb b/sdk/ruby/test/test_collection.rb index 1979443733..8b747c3652 100644 --- a/sdk/ruby/test/test_collection.rb +++ b/sdk/ruby/test/test_collection.rb @@ -36,6 +36,29 @@ class CollectionTest < Minitest::Test end end + def test_range_edge_cases + [ + ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1\n", + ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file2\n", + ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file1\n", + ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:file1 0:0:file2 0:0:file1\n", + ". 0cc175b9c0f1b6a831c399e269772661+1 0:0:file1 1:0:file2 1:0:file1\n", + ].each do |txt| + coll = Arv::Collection.new(txt) + coll.normalize + assert_match(/ 0:0:file1/, coll.manifest_text) + end + [ + ". d41d8cd98f00b204e9800998ecf8427e+0 1:0:file1\n", + ". 0cc175b9c0f1b6a831c399e269772661+1 0:0:file1 2:0:file2 1:0:file1\n", + ].each do |txt| + assert_raises(RangeError) do + coll = Arv::Collection.new(txt) + coll.normalize + end + end + end + def test_non_manifest_construction_error ["word", ". abc def", ". #{random_block} 0:", ". / !"].each do |m_text| assert_raises(ArgumentError, -- 2.30.2