From: Dan Gohman Date: Tue, 19 Feb 2013 18:57:53 +0000 (+0000) Subject: Don't trust st_size of a character device. This fixes using X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=2b49dec41bff103925d63b57f79b076daad4179e;p=oota-llvm.git Don't trust st_size of a character device. This fixes using /dev/stdin as an input when stdin is connected to a tty, for example. No test, because it's difficult to write a reasonably portable test for this. /dev/stdin isn't a character device when stdin is redirected from a file or connected to a pipe. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175542 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Support/MemoryBuffer.cpp b/lib/Support/MemoryBuffer.cpp index 65b43322e66..b0a20853b5c 100644 --- a/lib/Support/MemoryBuffer.cpp +++ b/lib/Support/MemoryBuffer.cpp @@ -322,9 +322,9 @@ error_code MemoryBuffer::getOpenFile(int FD, const char *Filename, return error_code(errno, posix_category()); } - // If this is a named pipe, we can't trust the size. Create the memory - // buffer by copying off the stream. - if (S_ISFIFO(FileInfo.st_mode)) { + // If this is a named pipe or character device, we can't trust the size. + // Create the memory buffer by copying off the stream. + if (S_ISFIFO(FileInfo.st_mode) || S_ISCHR(FileInfo.st_mode)) { return getMemoryBufferForStream(FD, Filename, result); }