fix detail::pythonbuf::overflow()'s return value to return not_eof(c) (#1479)
diff --git a/include/pybind11/iostream.h b/include/pybind11/iostream.h
index a9c27aa..3caf556 100644
--- a/include/pybind11/iostream.h
+++ b/include/pybind11/iostream.h
@@ -34,7 +34,7 @@
*pptr() = traits_type::to_char_type(c);
pbump(1);
}
- return sync() ? traits_type::not_eof(c) : traits_type::eof();
+ return sync() == 0 ? traits_type::not_eof(c) : traits_type::eof();
}
int sync() {
diff --git a/tests/test_iostream.py b/tests/test_iostream.py
index 3364849..167b887 100644
--- a/tests/test_iostream.py
+++ b/tests/test_iostream.py
@@ -53,6 +53,16 @@
assert stdout == ''
assert stderr == msg
+def test_captured_large_string(capsys):
+ # Make this bigger than the buffer used on the C++ side: 1024 chars
+ msg = "I've been redirected to Python, I hope!"
+ msg = msg * (1024 // len(msg) + 1)
+
+ m.captured_output_default(msg)
+ stdout, stderr = capsys.readouterr()
+ assert stdout == msg
+ assert stderr == ''
+
def test_guard_capture(capsys):
msg = "I've been redirected to Python, I hope!"