diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
new file mode 100644
index 0000000..fc0c2d2
--- /dev/null
+++ b/Lib/test/test_cmd_line.py
@@ -0,0 +1,50 @@
+
+import test.test_support, unittest
+import sys
+import popen2
+
+class CmdLineTest(unittest.TestCase):
+    def start_python(self, cmd_line):
+        outfp, infp = popen2.popen4('%s %s' % (sys.executable, cmd_line))
+        infp.close()
+        data = outfp.read()
+        outfp.close()
+        return data
+
+    def test_directories(self):
+        self.assertTrue('is a directory' in self.start_python('.'))
+        self.assertTrue('is a directory' in self.start_python('< .'))
+
+    def verify_valid_flag(self, cmd_line):
+        data = self.start_python(cmd_line)
+        self.assertTrue(data.endswith('\n'))
+        self.assertTrue('Traceback' not in data)
+
+    def test_environment(self):
+        self.verify_valid_flag('-E')
+
+    def test_optimize(self):
+        self.verify_valid_flag('-O')
+        self.verify_valid_flag('-OO')
+
+    def test_q(self):
+        self.verify_valid_flag('-Qold')
+        self.verify_valid_flag('-Qnew')
+        self.verify_valid_flag('-Qwarn')
+        self.verify_valid_flag('-Qwarnall')
+
+    def test_site_flag(self):
+        self.verify_valid_flag('-S')
+
+    def test_usage(self):
+        self.assertTrue('usage' in self.start_python('-h'))
+
+    def test_version(self):
+        version = 'Python %d.%d' % sys.version_info[:2]
+        self.assertTrue(self.start_python('-V').startswith(version))
+
+def test_main():
+    test.test_support.run_unittest(CmdLineTest)
+
+if __name__ == "__main__":
+    test_main()
diff --git a/Misc/NEWS b/Misc/NEWS
index bf40e9d..0826013 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- SF Bug #887946: fix segfault when redirecting stdin from a directory.
+  Provide a warning when a directory is passed on the command line.
+
 - Fix segfault with invalid coding.
 
 - SF bug #772896: unknown encoding results in MemoryError.
diff --git a/Modules/main.c b/Modules/main.c
index 1005b94..d511e59 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -359,6 +359,14 @@
 					}
 				}
 			}
+			{
+				/* XXX: does this work on Win/Win64? (see posix_fstat) */
+				struct stat sb;
+				if (fstat(fileno(fp), &sb) == 0 &&
+				    S_ISDIR(sb.st_mode)) {
+					fprintf(stderr, "%s: warning '%s' is a directory\n", argv[0], filename);
+				}
+			}
 		}
 	}
 
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 5a8c7af..0775bb8 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -947,6 +947,15 @@
 	m = Py_InitModule3("sys", sys_methods, sys_doc);
 	sysdict = PyModule_GetDict(m);
 
+	{
+		/* XXX: does this work on Win/Win64? (see posix_fstat) */
+		struct stat sb;
+		if (fstat(fileno(stdin), &sb) == 0 &&
+		    S_ISDIR(sb.st_mode)) {
+			Py_FatalError("<stdin> is a directory");
+		}
+	}
+
 	/* Closing the standard FILE* if sys.std* goes aways causes problems
 	 * for embedded Python usages. Closing them when somebody explicitly
 	 * invokes .close() might be possible, but the FAQ promises they get
