diff --git a/src/osgPlugins/stl/ReaderWriterSTL.cpp b/src/osgPlugins/stl/ReaderWriterSTL.cpp index b7a000f07..cce0d7d02 100644 --- a/src/osgPlugins/stl/ReaderWriterSTL.cpp +++ b/src/osgPlugins/stl/ReaderWriterSTL.cpp @@ -324,7 +324,10 @@ bool ReaderWriterSTL::ReaderObject::readStlAscii(FILE* fp) unsigned int vertexIndex = 0; unsigned int normalIndex = 0; - char buf[256]; + const int MaxLineSize = 256; + char buf[MaxLineSize]; + char sx[MaxLineSize],sy[MaxLineSize],sz[MaxLineSize]; + while (fgets(buf, sizeof(buf), fp)) { // strip '\n' or '\r\n' and trailing whitespace @@ -342,12 +345,16 @@ bool ReaderWriterSTL::ReaderObject::readStlAscii(FILE* fp) ++bp; } - if (strncmp(bp, "vertex", 6) == 0) { - float vx,vy,vz; - if (sscanf(bp+6, "%f %f %f", &vx,&vy,&vz) == 3) { + if (strncmp(bp, "vertex", 6) == 0) + { + if (sscanf(bp+6, "%s %s %s", sx,sy,sz) == 3) { if (!_vertex.valid()) _vertex = new osg::Vec3Array; + float vx = osg::asciiToFloat(sx); + float vy = osg::asciiToFloat(sy); + float vz = osg::asciiToFloat(sz); + vertexIndex = _vertex->size(); if (vertexCount < 3) { _vertex->push_back(osg::Vec3(vx,vy,vz)); @@ -369,9 +376,13 @@ bool ReaderWriterSTL::ReaderObject::readStlAscii(FILE* fp) } } } - else if (strncmp(bp, "facet", 5) == 0) { - float nx,ny,nz; - if (sscanf(bp+5, "%*s %f %f %f", &nx,&ny,&nz) == 3) { + else if (strncmp(bp, "facet", 5) == 0) + { + if (sscanf(bp+5, "%*s %s %s %s", sx,sy,sz) == 3) { + + float nx = osg::asciiToFloat(sx); + float ny = osg::asciiToFloat(sy); + float nz = osg::asciiToFloat(sz); if (!_normal.valid()) _normal = new osg::Vec3Array;