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;
|
++ 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.
|
// This is a quad. Produce the other triangle.
|
||||||
stl_facet &facet2 = stl.facet_start[i_face++];
|
stl_facet &facet2 = stl.facet_start[i_face++];
|
||||||
facet2.vertex[0] = facet.vertex[0];
|
facet2.vertex[0] = facet.vertex[0];
|
||||||
|
|
|
@ -338,11 +338,14 @@ bool objparse(const char *path, ObjData &data)
|
||||||
char *c = buf + lastLine;
|
char *c = buf + lastLine;
|
||||||
while (*c == ' ' || *c == '\t')
|
while (*c == ' ' || *c == '\t')
|
||||||
++ c;
|
++ c;
|
||||||
|
//FIXME check the return value and exit on error?
|
||||||
|
// Will it break parsing of some obj files?
|
||||||
obj_parseline(c, data);
|
obj_parseline(c, data);
|
||||||
lastLine = i + 1;
|
lastLine = i + 1;
|
||||||
}
|
}
|
||||||
lenPrev = len - lastLine;
|
lenPrev = len - lastLine;
|
||||||
memmove(buf, buf + lastLine, lenPrev);
|
memmove(buf, buf + lastLine, lenPrev);
|
||||||
|
assert(lenPrev <= 65536);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (std::bad_alloc&) {
|
catch (std::bad_alloc&) {
|
||||||
|
|
Loading…
Reference in a new issue