You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I've encountered an issue when using LoadObj to parse a file. Specifically, what happens when the wrong file type is provided to the parser. In this case, LoadObj doesn't return an error, it simply leaves the vector of shape_t empty.
The reason for this, based on a coarse once over on the code, is that the parsing takes an XML-like approach. It looks for specific tokens at the beginning of lines (e.g., f, v, vt, etc.) If it finds such a token and the remainder of the line is not consistent with what it expects to see, it returns false. However, if it finds no such token at the beginning of the line, the line is simply ignored. Thus, if I were to pass an STL file into LoadObj, the parsing would report "success", but give me empty geometry.
If we applied a stricter interpretation of the Obj spec, a line that isn't strictly valid OBJ and isn't commented out should produce an error as being malformed for an OBJ file. This would give us a greater power to distinguish the output of LoadObj.
I'm willing to submit a PR in this regard -- but I want to gauge the interest of the set of users in this regard.
The text was updated successfully, but these errors were encountered:
.obj is super flexible format and it may be difficult to detect input data is invalid or not.
Currently unknown tokens are parsed as unknown_parameter and user can do whatever they want with it, so we cannot report error in non-strict mode(current implementation of tinyobjloader).
Check if input file is ASCII or Binary and report an error if a file contains Binary data.
This makes sense to me. Although I'd also really like to reject files containing JSON or XML as well.
Short of implementing the full spec, two options come to mind:
Add generic handling for unsupported commands, which checks that the command is made of letters, and is followed by some other tokens that are valid for OBJ. This would reject non-OBJ-like things, such as XML and most every JSON file.
Add a flag that emits warnings on unknown commands.
Add generic handling for unsupported commands, which checks that the command is made of letters, and is followed by some other tokens that are valid for OBJ
I see. We can scan the head of a file(e.g. first N bytes) then we can reject a file which contains invalid charactes(e.g. { for JSON, < for XML, non-ascii characters for Binary data). This would require less work to implement.
Add a flag that emits warnings on unknown commands.
I've encountered an issue when using
LoadObj
to parse a file. Specifically, what happens when the wrong file type is provided to the parser. In this case,LoadObj
doesn't return an error, it simply leaves the vector ofshape_t
empty.The reason for this, based on a coarse once over on the code, is that the parsing takes an XML-like approach. It looks for specific tokens at the beginning of lines (e.g.,
f
,v
,vt
, etc.) If it finds such a token and the remainder of the line is not consistent with what it expects to see, it returns false. However, if it finds no such token at the beginning of the line, the line is simply ignored. Thus, if I were to pass an STL file intoLoadObj
, the parsing would report "success", but give me empty geometry.If we applied a stricter interpretation of the Obj spec, a line that isn't strictly valid OBJ and isn't commented out should produce an error as being malformed for an OBJ file. This would give us a greater power to distinguish the output of
LoadObj
.I'm willing to submit a PR in this regard -- but I want to gauge the interest of the set of users in this regard.
The text was updated successfully, but these errors were encountered: