diff --git a/libs/ardour/audioregion.cc b/libs/ardour/audioregion.cc
index ddd152b..cca522b 100644
--- a/libs/ardour/audioregion.cc
+++ b/libs/ardour/audioregion.cc
@@ -1819,9 +1819,11 @@ AudioRegion::find_silence (Sample threshold, framecnt_t min_length, framecnt_t f
 		framecnt_t cur_samples = 0;
 		/* fill `loudest' with the loudest absolute sample at each instant, across all channels */
 		memset (loudest.get(), 0, sizeof (Sample) * block_size);
+		framecnt_t to_read = ((end - pos) < block_size) ? (end - pos) : block_size;
+		
 		for (uint32_t n = 0; n < n_channels(); ++n) {
 
-			cur_samples = read_raw_internal (buf.get(), pos, block_size, n);
+			cur_samples = read_raw_internal (buf.get(), pos, to_read, n);
 			for (framecnt_t i = 0; i < cur_samples; ++i) {
 				loudest[i] = max (loudest[i], abs (buf[i]));
 			}
