diff --git a/src/draco/io/mesh_io.cc b/src/draco/io/mesh_io.cc index adc66e5..24160ac 100644 --- a/src/draco/io/mesh_io.cc +++ b/src/draco/io/mesh_io.cc @@ -31,7 +31,8 @@ std::unique_ptr ReadMeshFromFile(const std::string &file_name, std::unique_ptr mesh(new Mesh()); // Analyze file extension. const std::string extension = - parser::ToLower(file_name.substr(file_name.size() - 4)); + parser::ToLower(file_name.size() >= 4 ? + file_name.substr(file_name.size() - 4) : file_name); if (extension == ".obj") { // Wavefront OBJ file format. ObjDecoder obj_decoder; diff --git a/src/draco/io/point_cloud_io.cc b/src/draco/io/point_cloud_io.cc index 548da35..d3435a3 100644 --- a/src/draco/io/point_cloud_io.cc +++ b/src/draco/io/point_cloud_io.cc @@ -25,7 +25,8 @@ std::unique_ptr ReadPointCloudFromFile( const std::string &file_name) { std::unique_ptr pc(new PointCloud()); // Analyze file extension. - const std::string extension = file_name.substr(file_name.size() - 4); + const std::string extension = file_name.size() >= 4 ? + file_name.substr(file_name.size() - 4) : file_name; if (extension == ".obj") { // Wavefront OBJ file format. ObjDecoder obj_decoder; diff --git a/src/draco/tools/draco_decoder.cc b/src/draco/tools/draco_decoder.cc index 4f3bac0..512301b 100644 --- a/src/draco/tools/draco_decoder.cc +++ b/src/draco/tools/draco_decoder.cc @@ -134,8 +134,8 @@ int main(int argc, char **argv) { // Save the decoded geometry into a file. // TODO(ostava): Currently only .ply and .obj are supported. - const std::string extension = - options.output.substr(options.output.size() - 4); + const std::string extension = options.output.size() >= 4 ? + options.output.substr(options.output.size() - 4) : options.output; if (extension == ".obj") { draco::ObjEncoder obj_encoder; if (mesh) {