shithub: sox

Download patch

ref: 2bd6911168b9440b9c4ead117a63220a53009bbb
parent: 8524406f40fabd07d575d8f154f492ab7e5562dd
author: cbagwell <cbagwell>
date: Tue Feb 22 13:07:44 EST 2000

Updating comment code in aiff handler.

--- a/src/aiff.c
+++ b/src/aiff.c
@@ -246,20 +246,12 @@
 			    st_readb(ft, (unsigned char *)&trash);
 		}
 		else if (strncmp(buf, "ANNO", 4) == 0) {
-			/* Old form of comment chunk */
-			st_readdw(ft, &chunksize);
-			/* allocate enough memory to hold the comment */
-			ft->comment = (char *) malloc((size_t) chunksize);
-			if (ft->comment == NULL)
+			rc = textChunk(&(ft->comment), "Annotation:", ft);
+			if (rc)
 			{
-			  fail("AIFF: Couldn't allocate ANNO header");
+				/* Fail already called in function */
 			  return(ST_EOF);
 			}
-			if (fread(ft->comment, 1, chunksize, ft->fp) != chunksize)
-			{
-			  fail("AIFF: Unexpected EOF in ANNO header");
-			  return(ST_EOF);
-			}
 		}
 		else if (strncmp(buf, "AUTH", 4) == 0) {
 		  /* Author chunk */
@@ -476,6 +468,16 @@
     return(ST_EOF);
   }
   *(*text + chunksize) = '\0';
+	if (chunksize % 2)
+	{
+		/* Read past pad byte */
+		char c;
+		if (fread(&c, 1, 1, ft->fp) != 1)
+		{
+			fail("AIFF: Unexpected EOF in %s header", chunkDescription);
+			return(ST_EOF);
+		}
+	}
   if(verbose) {
     printf("%-10s   \"%s\"\n", chunkDescription, *text);
   }