diff --git a/README.md b/README.md
index 1c62e137..63b62900 100644
--- a/README.md
+++ b/README.md
@@ -512,7 +512,7 @@ To compile and run the tests, you need to execute
 $ make check
 
 ===============================================================================
-All tests passed (8905154 assertions in 35 test cases)
+All tests passed (8905158 assertions in 35 test cases)
 ```
 
 For more information, have a look at the file [.travis.yml](https://github.com/nlohmann/json/blob/master/.travis.yml).
diff --git a/src/json.hpp b/src/json.hpp
index 25a9dbcf..a428d6f8 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -8592,7 +8592,7 @@ basic_json_parser_63:
             const auto offset_cursor = m_cursor - m_start;
 
             // no stream is used or end of file is reached
-            if (m_stream == nullptr or not * m_stream)
+            if (m_stream == nullptr or m_stream->eof())
             {
                 // copy unprocessed characters to line buffer
                 m_line_buffer.clear();
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 7ca046ea..e5688e3e 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -7889,7 +7889,7 @@ class basic_json
             const auto offset_cursor = m_cursor - m_start;
 
             // no stream is used or end of file is reached
-            if (m_stream == nullptr or not * m_stream)
+            if (m_stream == nullptr or m_stream->eof())
             {
                 // copy unprocessed characters to line buffer
                 m_line_buffer.clear();
diff --git a/test/data/regression/broken_file.json b/test/data/regression/broken_file.json
new file mode 100644
index 00000000..622d51ed
--- /dev/null
+++ b/test/data/regression/broken_file.json
@@ -0,0 +1 @@
+{"AmbientOcclusion":false,"AnisotropicFiltering":16,"FOV":90,"FullScreen":true,"MipmapLevel":4,"RenderDistance":4,"VSync":true,"WindowResX":1920,"WindowResY":1080}
\ No newline at end of file
diff --git a/test/data/regression/working_file.json b/test/data/regression/working_file.json
new file mode 100644
index 00000000..87436c20
--- /dev/null
+++ b/test/data/regression/working_file.json
@@ -0,0 +1 @@
+{"AmbientOcclusion":false,"AnisotropicFiltering":16,"FOV":90,"FullScreen":true,"MipmapLevel":4,"RenderDistance":4,"VSync":true,"WindowResX":1920,"WindowResY":1080} 
\ No newline at end of file
diff --git a/test/src/unit-regression.cpp b/test/src/unit-regression.cpp
index f61595a9..ed432e58 100644
--- a/test/src/unit-regression.cpp
+++ b/test/src/unit-regression.cpp
@@ -31,6 +31,8 @@ SOFTWARE.
 #include "json.hpp"
 using nlohmann::json;
 
+#include <fstream>
+
 TEST_CASE("regression tests")
 {
     SECTION("issue #60 - Double quotation mark is not parsed correctly")
@@ -440,4 +442,19 @@ TEST_CASE("regression tests")
 
         CHECK(at_integer == val_integer);
     }
+
+    SECTION("issue #306 - Parsing fails without space at end of file")
+    {
+        for (auto filename :
+                {
+                    "test/data/regression/broken_file.json",
+                    "test/data/regression/working_file.json"
+                })
+        {
+            CAPTURE(filename);
+            json j;
+            std::ifstream f(filename);
+            CHECK_NOTHROW(j << f);
+        }
+    }
 }