From Donn Mielcarek, "We generated some bad ive files in our database. In

some of the files, the function readInt() would return
a 0 size.  While linux will happily continue on,
creating 0 sized arrays, Windows immediately
blows up, with sparks sometimes flying out the
side of the machine!

I added a simple check for zero size in
each of the functions that allocates arrays
based on the size variable, and I thought
I'd pass it along.  Now the program will
not die if it encounters an ive file with bad
data."
This commit is contained in:
Robert Osfield
2007-02-08 10:46:58 +00:00
parent 614331ce63
commit 0f4cd568f6

View File

@@ -295,6 +295,8 @@ double DataInputStream::readDouble(){
std::string DataInputStream::readString(){
std::string s;
int size = readInt();
if (size == 0)
return NULL;
s.resize(size);
_istream->read((char*)s.c_str(), size);
//if (_istream->rdstate() & _istream->failbit)
@@ -472,6 +474,8 @@ osg::Array* DataInputStream::readArray(){
osg::IntArray* DataInputStream::readIntArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::IntArray* a = new osg::IntArray(size);
_istream->read((char*)&((*a)[0]), INTSIZE*size);
@@ -491,6 +495,8 @@ osg::IntArray* DataInputStream::readIntArray()
osg::UByteArray* DataInputStream::readUByteArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::UByteArray* a = new osg::UByteArray(size);
_istream->read((char*)&((*a)[0]), CHARSIZE*size);
@@ -506,6 +512,8 @@ osg::UByteArray* DataInputStream::readUByteArray()
osg::UShortArray* DataInputStream::readUShortArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::UShortArray* a = new osg::UShortArray(size);
_istream->read((char*)&((*a)[0]), SHORTSIZE*size);
@@ -526,6 +534,8 @@ osg::UShortArray* DataInputStream::readUShortArray()
osg::UIntArray* DataInputStream::readUIntArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::UIntArray* a = new osg::UIntArray(size);
_istream->read((char*)&((*a)[0]), INTSIZE*size);
@@ -546,6 +556,8 @@ osg::UIntArray* DataInputStream::readUIntArray()
osg::Vec4ubArray* DataInputStream::readVec4ubArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec4ubArray* a = new osg::Vec4ubArray(size);
_istream->read((char*)&((*a)[0]), INTSIZE*size);
@@ -561,6 +573,8 @@ osg::Vec4ubArray* DataInputStream::readVec4ubArray()
osg::FloatArray* DataInputStream::readFloatArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::FloatArray* a = new osg::FloatArray(size);
@@ -582,6 +596,9 @@ osg::FloatArray* DataInputStream::readFloatArray()
osg::Vec2Array* DataInputStream::readVec2Array()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec2Array* a = new osg::Vec2Array(size);
_istream->read((char*)&((*a)[0]), FLOATSIZE*2*size);
@@ -605,6 +622,8 @@ osg::Vec2Array* DataInputStream::readVec2Array()
osg::Vec3Array* DataInputStream::readVec3Array()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec3Array* a = new osg::Vec3Array(size);
_istream->read((char*)&((*a)[0]), FLOATSIZE*3*size);
@@ -628,6 +647,8 @@ osg::Vec3Array* DataInputStream::readVec3Array()
osg::Vec4Array* DataInputStream::readVec4Array(){
int size = readInt();
if (size == 0)
return NULL;
osg::Vec4Array* a = new osg::Vec4Array(size);
_istream->read((char*)&((*a)[0]), FLOATSIZE*4*size);
@@ -649,6 +670,8 @@ osg::Vec4Array* DataInputStream::readVec4Array(){
osg::Vec2bArray* DataInputStream::readVec2bArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec2bArray* a = new osg::Vec2bArray(size);
_istream->read((char*)&((*a)[0]), CHARSIZE * 2 * size);
@@ -664,6 +687,8 @@ osg::Vec2bArray* DataInputStream::readVec2bArray()
osg::Vec3bArray* DataInputStream::readVec3bArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec3bArray* a = new osg::Vec3bArray(size);
_istream->read((char*)&((*a)[0]), CHARSIZE * 3 * size);
@@ -679,6 +704,8 @@ osg::Vec3bArray* DataInputStream::readVec3bArray()
osg::Vec4bArray* DataInputStream::readVec4bArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec4bArray* a = new osg::Vec4bArray(size);
_istream->read((char*)&((*a)[0]), CHARSIZE * 4 * size);
@@ -694,6 +721,8 @@ osg::Vec4bArray* DataInputStream::readVec4bArray()
osg::Vec2sArray* DataInputStream::readVec2sArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec2sArray* a = new osg::Vec2sArray(size);
_istream->read((char*)&((*a)[0]), SHORTSIZE * 2 * size);
@@ -718,6 +747,8 @@ osg::Vec2sArray* DataInputStream::readVec2sArray()
osg::Vec3sArray* DataInputStream::readVec3sArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec3sArray* a = new osg::Vec3sArray(size);
_istream->read((char*)&((*a)[0]), SHORTSIZE * 3 * size);
@@ -743,6 +774,8 @@ osg::Vec3sArray* DataInputStream::readVec3sArray()
osg::Vec4sArray* DataInputStream::readVec4sArray()
{
int size = readInt();
if (size == 0)
return NULL;
osg::Vec4sArray* a = new osg::Vec4sArray(size);
_istream->read((char*)&((*a)[0]), SHORTSIZE * 4 * size);