[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#658818: fails to handle cuesheets with 99 tracks



Package: cuetools
Version: 1.3.1-9
Severity: normal

There's an off-by-one error in cd.c which causes cueprint to wrongly reject
cuesheets with 99 tracks.  Its actual limit is 98 tracks, and yet as the
source code notes, the Red Book audio standard permits 99 tracks per disc
(and 99 indices per track).

When I looked into this, I saw that:

1) not only will the same error occur with index numbers, but
2) the wrong preprocessor symbol is being expanded when checking the index
number.

(Can this few people really have ever dealt with Nine Inch Nails's _Broken_
EP?  It's not exactly an obscure title, especially among hackers...)

Please find attached a cuesheet which will enable reproduction of the
problem, and a tested patch fixing it.

To reproduce:
$ cueprint -d '%N\n' Nine\ Inch\ Nails/05.Broken.flac.cue

Full disclosure: I did not test the index number breakage, nor my fix for
it.

-- System Information:
Debian Release: 6.0.4
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: powerpc (ppc64)

Kernel: Linux 2.6.32-5-powerpc64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
PERFORMER "Nine Inch Nails"
TITLE "Broken"
FILE "dummy.wav" WAVE
  TRACK 01 AUDIO
    TITLE "Pinion"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "Wish"
    INDEX 01 01:03:12
  TRACK 03 AUDIO
    TITLE "Last"
    INDEX 01 04:49:67
  TRACK 04 AUDIO
    TITLE "Help Me I Am in Hell"
    INDEX 01 09:34:35
  TRACK 05 AUDIO
    TITLE "Happiness in Slavery"
    INDEX 01 11:30:50
  TRACK 06 AUDIO
    TITLE "Gave Up"
    INDEX 01 16:51:57
  TRACK 07 AUDIO
    TITLE "untitled"
    INDEX 01 21:00:25
  TRACK 08 AUDIO
    TITLE "untitled"
    INDEX 01 21:01:25
  TRACK 09 AUDIO
    TITLE "untitled"
    INDEX 01 21:02:25
  TRACK 10 AUDIO
    TITLE "untitled"
    INDEX 01 21:03:25
  TRACK 11 AUDIO
    TITLE "untitled"
    INDEX 01 21:04:25
  TRACK 12 AUDIO
    TITLE "untitled"
    INDEX 01 21:05:25
  TRACK 13 AUDIO
    TITLE "untitled"
    INDEX 01 21:06:25
  TRACK 14 AUDIO
    TITLE "untitled"
    INDEX 01 21:07:25
  TRACK 15 AUDIO
    TITLE "untitled"
    INDEX 01 21:08:25
  TRACK 16 AUDIO
    TITLE "untitled"
    INDEX 01 21:09:25
  TRACK 17 AUDIO
    TITLE "untitled"
    INDEX 01 21:10:25
  TRACK 18 AUDIO
    TITLE "untitled"
    INDEX 01 21:11:25
  TRACK 19 AUDIO
    TITLE "untitled"
    INDEX 01 21:12:25
  TRACK 20 AUDIO
    TITLE "untitled"
    INDEX 01 21:13:25
  TRACK 21 AUDIO
    TITLE "untitled"
    INDEX 01 21:14:25
  TRACK 22 AUDIO
    TITLE "untitled"
    INDEX 01 21:15:25
  TRACK 23 AUDIO
    TITLE "untitled"
    INDEX 01 21:16:25
  TRACK 24 AUDIO
    TITLE "untitled"
    INDEX 01 21:17:25
  TRACK 25 AUDIO
    TITLE "untitled"
    INDEX 01 21:18:25
  TRACK 26 AUDIO
    TITLE "untitled"
    INDEX 01 21:19:25
  TRACK 27 AUDIO
    TITLE "untitled"
    INDEX 01 21:20:25
  TRACK 28 AUDIO
    TITLE "untitled"
    INDEX 01 21:21:25
  TRACK 29 AUDIO
    TITLE "untitled"
    INDEX 01 21:22:25
  TRACK 30 AUDIO
    TITLE "untitled"
    INDEX 01 21:23:25
  TRACK 31 AUDIO
    TITLE "untitled"
    INDEX 01 21:24:25
  TRACK 32 AUDIO
    TITLE "untitled"
    INDEX 01 21:25:25
  TRACK 33 AUDIO
    TITLE "untitled"
    INDEX 01 21:26:25
  TRACK 34 AUDIO
    TITLE "untitled"
    INDEX 01 21:27:25
  TRACK 35 AUDIO
    TITLE "untitled"
    INDEX 01 21:28:25
  TRACK 36 AUDIO
    TITLE "untitled"
    INDEX 01 21:29:25
  TRACK 37 AUDIO
    TITLE "untitled"
    INDEX 01 21:30:25
  TRACK 38 AUDIO
    TITLE "untitled"
    INDEX 01 21:31:25
  TRACK 39 AUDIO
    TITLE "untitled"
    INDEX 01 21:32:25
  TRACK 40 AUDIO
    TITLE "untitled"
    INDEX 01 21:33:25
  TRACK 41 AUDIO
    TITLE "untitled"
    INDEX 01 21:34:25
  TRACK 42 AUDIO
    TITLE "untitled"
    INDEX 01 21:35:25
  TRACK 43 AUDIO
    TITLE "untitled"
    INDEX 01 21:36:25
  TRACK 44 AUDIO
    TITLE "untitled"
    INDEX 01 21:37:25
  TRACK 45 AUDIO
    TITLE "untitled"
    INDEX 01 21:38:25
  TRACK 46 AUDIO
    TITLE "untitled"
    INDEX 01 21:39:25
  TRACK 47 AUDIO
    TITLE "untitled"
    INDEX 01 21:40:25
  TRACK 48 AUDIO
    TITLE "untitled"
    INDEX 01 21:41:25
  TRACK 49 AUDIO
    TITLE "untitled"
    INDEX 01 21:42:25
  TRACK 50 AUDIO
    TITLE "untitled"
    INDEX 01 21:43:25
  TRACK 51 AUDIO
    TITLE "untitled"
    INDEX 01 21:44:25
  TRACK 52 AUDIO
    TITLE "untitled"
    INDEX 01 21:45:25
  TRACK 53 AUDIO
    TITLE "untitled"
    INDEX 01 21:46:25
  TRACK 54 AUDIO
    TITLE "untitled"
    INDEX 01 21:47:25
  TRACK 55 AUDIO
    TITLE "untitled"
    INDEX 01 21:48:25
  TRACK 56 AUDIO
    TITLE "untitled"
    INDEX 01 21:49:25
  TRACK 57 AUDIO
    TITLE "untitled"
    INDEX 01 21:50:25
  TRACK 58 AUDIO
    TITLE "untitled"
    INDEX 01 21:51:25
  TRACK 59 AUDIO
    TITLE "untitled"
    INDEX 01 21:52:25
  TRACK 60 AUDIO
    TITLE "untitled"
    INDEX 01 21:53:25
  TRACK 61 AUDIO
    TITLE "untitled"
    INDEX 01 21:54:25
  TRACK 62 AUDIO
    TITLE "untitled"
    INDEX 01 21:55:25
  TRACK 63 AUDIO
    TITLE "untitled"
    INDEX 01 21:56:25
  TRACK 64 AUDIO
    TITLE "untitled"
    INDEX 01 21:57:25
  TRACK 65 AUDIO
    TITLE "untitled"
    INDEX 01 21:58:25
  TRACK 66 AUDIO
    TITLE "untitled"
    INDEX 01 21:59:25
  TRACK 67 AUDIO
    TITLE "untitled"
    INDEX 01 22:00:25
  TRACK 68 AUDIO
    TITLE "untitled"
    INDEX 01 22:01:25
  TRACK 69 AUDIO
    TITLE "untitled"
    INDEX 01 22:02:25
  TRACK 70 AUDIO
    TITLE "untitled"
    INDEX 01 22:03:25
  TRACK 71 AUDIO
    TITLE "untitled"
    INDEX 01 22:04:25
  TRACK 72 AUDIO
    TITLE "untitled"
    INDEX 01 22:05:25
  TRACK 73 AUDIO
    TITLE "untitled"
    INDEX 01 22:06:25
  TRACK 74 AUDIO
    TITLE "untitled"
    INDEX 01 22:07:25
  TRACK 75 AUDIO
    TITLE "untitled"
    INDEX 01 22:08:25
  TRACK 76 AUDIO
    TITLE "untitled"
    INDEX 01 22:09:25
  TRACK 77 AUDIO
    TITLE "untitled"
    INDEX 01 22:10:25
  TRACK 78 AUDIO
    TITLE "untitled"
    INDEX 01 22:11:25
  TRACK 79 AUDIO
    TITLE "untitled"
    INDEX 01 22:12:25
  TRACK 80 AUDIO
    TITLE "untitled"
    INDEX 01 22:13:25
  TRACK 81 AUDIO
    TITLE "untitled"
    INDEX 01 22:14:25
  TRACK 82 AUDIO
    TITLE "untitled"
    INDEX 01 22:15:25
  TRACK 83 AUDIO
    TITLE "untitled"
    INDEX 01 22:16:25
  TRACK 84 AUDIO
    TITLE "untitled"
    INDEX 01 22:17:25
  TRACK 85 AUDIO
    TITLE "untitled"
    INDEX 01 22:18:25
  TRACK 86 AUDIO
    TITLE "untitled"
    INDEX 01 22:19:25
  TRACK 87 AUDIO
    TITLE "untitled"
    INDEX 01 22:20:25
  TRACK 88 AUDIO
    TITLE "untitled"
    INDEX 01 22:21:25
  TRACK 89 AUDIO
    TITLE "untitled"
    INDEX 01 22:22:25
  TRACK 90 AUDIO
    TITLE "untitled"
    INDEX 01 22:23:25
  TRACK 91 AUDIO
    TITLE "untitled"
    INDEX 01 22:24:25
  TRACK 92 AUDIO
    TITLE "untitled"
    INDEX 01 22:25:25
  TRACK 93 AUDIO
    TITLE "untitled"
    INDEX 01 22:26:25
  TRACK 94 AUDIO
    TITLE "untitled"
    INDEX 01 22:27:25
  TRACK 95 AUDIO
    TITLE "untitled"
    INDEX 01 22:28:25
  TRACK 96 AUDIO
    TITLE "untitled"
    INDEX 01 22:29:25
  TRACK 97 AUDIO
    TITLE "untitled"
    INDEX 01 22:30:25
  TRACK 98 AUDIO
    TITLE "Physical (You're So)"
    INDEX 01 22:31:25
  TRACK 99 AUDIO
    TITLE "Suck"
    INDEX 01 28:01:15
diff -urN cuetools-1.3.1~/src/lib/cd.c cuetools-1.3.1/src/lib/cd.c
--- cuetools-1.3.1~/src/lib/cd.c	2012-02-05 23:35:20.000000000 -0500
+++ cuetools-1.3.1/src/lib/cd.c	2012-02-05 23:36:51.000000000 -0500
@@ -125,7 +125,7 @@
 
 Track *cd_add_track (Cd *cd)
 {
-	if (MAXTRACK - 1 > cd->ntrack)
+	if (MAXTRACK > cd->ntrack)
 		cd->ntrack++;
 	else
 		fprintf(stderr, "too many tracks\n");
@@ -261,7 +261,7 @@
 
 void track_add_index (Track *track, long index)
 {
-	if (MAXTRACK - 1 > track->nindex)
+	if (MAXINDEX > track->nindex)
 		track->nindex++;
 	else
 		fprintf(stderr, "too many indexes\n");

Reply to: