Merge "libFLAC: Fix divide by zero error in FLAC__stream_decoder_seek_absolute" am: 3210dfbb5e am: 70ff40acdc am: 4666b19fef

Original change: https://android-review.googlesource.com/c/platform/external/flac/+/1483903

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I59eddb6ee4428862ad74ecd44386ee01ad1918b0
diff --git a/src/libFLAC/stream_decoder.c b/src/libFLAC/stream_decoder.c
index 5928bbe..6707017 100644
--- a/src/libFLAC/stream_decoder.c
+++ b/src/libFLAC/stream_decoder.c
@@ -3119,8 +3119,11 @@
 		/* a little less accurate: */
 		if(upper_bound - lower_bound < 0xffffffff)
 			pos = (FLAC__int64)lower_bound + (FLAC__int64)(((target_sample - lower_bound_sample) * (upper_bound - lower_bound)) / (upper_bound_sample - lower_bound_sample)) - approx_bytes_per_frame;
-		else /* @@@ WATCHOUT, ~2TB limit */
-			pos = (FLAC__int64)lower_bound + (FLAC__int64)((((target_sample - lower_bound_sample)>>8) * ((upper_bound - lower_bound)>>8)) / ((upper_bound_sample - lower_bound_sample)>>16)) - approx_bytes_per_frame;
+		else { /* @@@ WATCHOUT, ~2TB limit */
+			FLAC__uint64 sample_range_16 = (upper_bound_sample - lower_bound_sample) >> 16;
+			if (sample_range_16 == 0) sample_range_16 = 1; // avoid divide by 0
+			pos = (FLAC__int64)lower_bound + (FLAC__int64)(((target_sample - lower_bound_sample) >> 8) * ((upper_bound - lower_bound) >> 8) / sample_range_16) - approx_bytes_per_frame;
+		}
 #endif
 		if(pos >= (FLAC__int64)upper_bound)
 			pos = (FLAC__int64)upper_bound - 1;