From 5f7b450b47e455a501b82b5e81308be168e4949f Mon Sep 17 00:00:00 2001 From: h-h-h-h <13482553+h-h-h-h@users.noreply.github.com> Date: Mon, 30 Mar 2020 07:53:40 +0200 Subject: [PATCH] Prevent exception on non-standard CUE sheet (#22) * Prevent exception on non-standard CUE sheet In case of a CUE sheet with more than about 99 tracks, this `string` constructor [1] threw an exception, because its repetition parameter was negative. Fixes Exception: 'count' must be non-negative. * Update CDImage.cs Shortened code by use of Math.Max() [1] https://github.com/gchudov/cuetools.net/blob/980e63d956617bbb0aade54338ae05e2e6aa133f/CUETools.CDImage/CDImage.cs#L435 --- CUETools.CDImage/CDImage.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CUETools.CDImage/CDImage.cs b/CUETools.CDImage/CDImage.cs index c909b73..e0b7f3c 100644 --- a/CUETools.CDImage/CDImage.cs +++ b/CUETools.CDImage/CDImage.cs @@ -432,7 +432,8 @@ namespace CUETools.CDImage for (int iTrack = 1; iTrack < AudioTracks; iTrack++) mbSB.AppendFormat("{0:X8}", _tracks[_firstAudio + iTrack].Start - _tracks[_firstAudio].Start); mbSB.AppendFormat("{0:X8}", _tracks[_firstAudio + (int)AudioTracks - 1].End + 1 - _tracks[_firstAudio].Start); - mbSB.Append(new string('0', (100 - (int)AudioTracks) * 8)); + // Use Math.Max() to avoid negative count number in case of non-standard CUE sheet with more than 99 tracks. + mbSB.Append(new string('0', Math.Max(0, (100 - (int)AudioTracks) * 8))); byte[] hashBytes = (new SHA1CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(mbSB.ToString())); return Convert.ToBase64String(hashBytes).Replace('+', '.').Replace('/', '_').Replace('=', '-'); }