Improvements of OBJ parser robustness.
This commit is contained in:
parent
ddef084184
commit
7df9f3e422
2 changed files with 5 additions and 1 deletions
|
@ -70,7 +70,8 @@ bool load_obj(const char *path, TriangleMesh *meshptr)
|
|||
++ num_normals;
|
||||
}
|
||||
}
|
||||
if (data.vertices[i].coordIdx != -1) {
|
||||
// Result of obj_parseline() call is not checked, thus not all vertices are necessarily finalized with coord_Idx == -1.
|
||||
if (i < data.vertices.size() && data.vertices[i].coordIdx != -1) {
|
||||
// This is a quad. Produce the other triangle.
|
||||
stl_facet &facet2 = stl.facet_start[i_face++];
|
||||
facet2.vertex[0] = facet.vertex[0];
|
||||
|
|
|
@ -338,11 +338,14 @@ bool objparse(const char *path, ObjData &data)
|
|||
char *c = buf + lastLine;
|
||||
while (*c == ' ' || *c == '\t')
|
||||
++ c;
|
||||
//FIXME check the return value and exit on error?
|
||||
// Will it break parsing of some obj files?
|
||||
obj_parseline(c, data);
|
||||
lastLine = i + 1;
|
||||
}
|
||||
lenPrev = len - lastLine;
|
||||
memmove(buf, buf + lastLine, lenPrev);
|
||||
assert(lenPrev <= 65536);
|
||||
}
|
||||
}
|
||||
catch (std::bad_alloc&) {
|
||||
|
|
Loading…
Reference in a new issue