From 0d42cbb58640e3bb8c944811d1b5ff64782128b0 Mon Sep 17 00:00:00 2001 From: Ondrej Stava Date: Thu, 6 Apr 2017 15:42:55 -0700 Subject: [PATCH] Fixed loading of .obj files that do not end with a new line character. --- io/obj_decoder.cc | 4 ++-- io/obj_decoder_test.cc | 8 ++++++++ testdata/eof_test.obj | 4 ++++ 3 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 testdata/eof_test.obj 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