a3661c
From da4d5bd53a1a57d1b39318b83d3280fbcd78e9f6 Mon Sep 17 00:00:00 2001
a3661c
From: Takashi Iwai <tiwai@suse.de>
a3661c
Date: Tue, 15 May 2018 22:17:01 +0200
a3661c
Subject: [PATCH] aplay: Fix invalid file size check for non-regular files
a3661c
a3661c
aplay tries to check the file size via fstat() at parsing the format
a3661c
headers and avoids parsing when the size is shorter than the given
a3661c
size.  This works fine for regular files, but when a special file like
a3661c
pipe is passed, it fails, eventually leading to the fallback mode
a3661c
wrongly.
a3661c
a3661c
A proper fix is to do this sanity check only for a regular file.
a3661c
a3661c
Reported-by: Jay Foster <jay@systech.com>
a3661c
Signed-off-by: Takashi Iwai <tiwai@suse.de>
a3661c
---
a3661c
 aplay/aplay.c | 3 ++-
a3661c
 1 file changed, 2 insertions(+), 1 deletion(-)
a3661c
a3661c
diff --git a/aplay/aplay.c b/aplay/aplay.c
a3661c
index bbd7fff..63ec9ef 100644
a3661c
--- a/aplay/aplay.c
a3661c
+++ b/aplay/aplay.c
a3661c
@@ -2821,7 +2821,8 @@ static int read_header(int *loaded, int header_size)
a3661c
 
a3661c
 	/* don't be adventurous, get out if file size is smaller than
a3661c
 	 * requested header size */
a3661c
-	if (buf.st_size < header_size)
a3661c
+	if ((buf.st_mode & S_IFMT) == S_IFREG &&
a3661c
+	    buf.st_size < header_size)
a3661c
 		return -1;
a3661c
 
a3661c
 	if (*loaded < header_size) {
a3661c
-- 
a3661c
2.13.6
a3661c