diff --git a/io/obj_decoder.cc b/io/obj_decoder.cc index e446f04..af4e098 100644 --- a/io/obj_decoder.cc +++ b/io/obj_decoder.cc @@ -369,12 +369,12 @@ bool ObjDecoder::ParseFace(bool *error) { } else { // Non-whitespace reached.. assume it's index declaration, skip it. num_indices++; - while (!parser::PeekWhitespace(buffer(), &is_end)) { + while (!parser::PeekWhitespace(buffer(), &is_end) && !is_end) { buffer()->Advance(1); } } } - if (is_end || num_indices < 3 || num_indices > 4) { + if (num_indices < 3 || num_indices > 4) { *error = true; return false; } diff --git a/io/obj_decoder_test.cc b/io/obj_decoder_test.cc index 9588332..0de83fa 100644 --- a/io/obj_decoder_test.cc +++ b/io/obj_decoder_test.cc @@ -89,4 +89,12 @@ TEST_F(ObjDecoderTest, ComplexPolyOBJ) { ASSERT_EQ(mesh, nullptr); } +TEST_F(ObjDecoderTest, EOFTestOBJ) { + // Tests loading of .obj models with no new line at the end of the file. + const std::string file_name = "eof_test.obj"; + const std::unique_ptr mesh(DecodeObj(file_name)); + ASSERT_NE(mesh, nullptr); + ASSERT_EQ(mesh->num_faces(), 1); +} + } // namespace draco diff --git a/testdata/eof_test.obj b/testdata/eof_test.obj new file mode 100644 index 0000000..969db3b --- /dev/null +++ b/testdata/eof_test.obj @@ -0,0 +1,4 @@ +v 1.00 0.10 0.00 +v 2.00 0.01 0.00 +v 3.00 0.11 0.00 +f 1 2 3 \ No newline at end of file