Fixed a range of issues reported by cppcheck:

[examples/osgphotoalbum/PhotoArchive.cpp:56]: (error) Memory leak: fileIndentifier
[examples/osgphotoalbum/PhotoArchive.cpp:257]: (error) Deallocating a deallocated pointer: newData
[examples/osgphotoalbum/PhotoArchive.cpp:318]: (error) Deallocating a deallocated pointer: newData
[src/osg/ImageUtils.cpp:116]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:307]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:312]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:367]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:399]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:400]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:482]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:483]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:484]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:519]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/ImageUtils.cpp:536]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:71]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:74]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:77]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:82]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:102]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:107]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:599]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:600]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:601]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:602]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:603]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:604]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:605]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osg/OcclusionQueryNode.cpp:606]: (portability) Extra qualification 'osg::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:134]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:135]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:136]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:137]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:139]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:177]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:178]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:195]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:198]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:203]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:205]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/ExternalFileWriter.cpp:253]: (portability) Extra qualification 'osgDB::' unnecessary and considered an error by many compilers.
[src/osgDB/InputStream.cpp:553]: (error) Memory leak: data
[src/osgDB/OutputStream.cpp:393]: (error) Memory leak: data
[src/osgPlugins/Inventor/ConvertToInventor.cpp:656]: (error) Mismatching allocation and deallocation: tmpArray
[src/osgPlugins/Inventor/ReaderWriterIV.cpp:237]: (error) Common realloc mistake: 'buf' nulled but not freed upon failure
[src/osgPlugins/OpenFlight/expGeometryRecords.cpp:167]: (portability) Extra qualification 'flt::' unnecessary and considered an error by many compilers.
[src/osgPlugins/OpenFlight/expGeometryRecords.cpp:373]: (portability) Extra qualification 'flt::' unnecessary and considered an error by many compilers.
[src/osgPlugins/cfg/CameraConfig.cpp:635]: (error) Unusual pointer arithmetic
[src/osgPlugins/freetype/FreeTypeLibrary.cpp:122]: (error) Memory leak: buffer
[src/osgPlugins/geo/ReaderWriterGEO.cpp:210]: (error) Possible null pointer dereference: gfd - otherwise it is redundant to check if gfd is null at line 211
[src/osgPlugins/geo/ReaderWriterGEO.cpp:227]: (error) Possible null pointer dereference: gfd - otherwise it is redundant to check if gfd is null at line 228
[src/osgPlugins/geo/ReaderWriterGEO.cpp:903]: (error) Possible null pointer dereference: gfd - otherwise it is redundant to check if gfd is null at line 904
[src/osgPlugins/geo/osgGeoNodes.h:180]: (error) Memory leak: geoHeaderGeo::intVars
[src/osgPlugins/geo/osgGeoNodes.h:181]: (error) Memory leak: geoHeaderGeo::useVars
[src/osgPlugins/geo/osgGeoNodes.h:182]: (error) Memory leak: geoHeaderGeo::extVars
[src/osgPlugins/md2/ReaderWriterMD2.cpp:180]: (error) Memory leak: mapbase
[src/osgPlugins/md2/ReaderWriterMD2.cpp:166]: (error) Resource leak: file_fd
[src/osgPlugins/pic/ReaderWriterPIC.cpp:152]: (error) Mismatching allocation and deallocation: tmpbuf
[src/osgPlugins/pic/ReaderWriterPIC.cpp:153]: (error) Mismatching allocation and deallocation: buffer
[src/osgPlugins/ply/plyfile.cpp:843]: (error) Memory leak: plyfile
[src/osgPlugins/pvr/ReaderWriterPVR.cpp:179]: (error) Memory leak: imageData
[src/osgPlugins/shp/ESRIShapeParser.cpp:29]: (error) Resource leak: fd
[src/osgPlugins/shp/XBaseParser.cpp:96]: (error) Resource leak: fd
[src/osgPlugins/zip/unzip.cpp:3158]: (error) Possible null pointer dereference: s - otherwise it is redundant to check if s is null at line 3159
[src/osgPlugins/zip/unzip.cpp:4155]: (error) Dangerous usage of 'rd' (strncpy doesn't always 0-terminate it)
[src/osgShadow/MinimalCullBoundsShadowMap.cpp:334]: (error) Possible null pointer dereference: rl - otherwise it is redundant to check if rl is null at line 331
[src/osgViewer/ScreenCaptureHandler.cpp:617]: (error) Possible null pointer dereference: camera - otherwise it is redundant to check if camera is null at line 611
[src/osgViewer/ScreenCaptureHandler.cpp:632]: (error) Possible null pointer dereference: camera - otherwise it is redundant to check if camera is null at line 626
[src/osgVolume/Locator.cpp:209]: (error) Dangerous iterator usage after erase()-method.
[src/osgVolume/RayTracedTechnique.cpp:274]: (error) Possible null pointer dereference: imageLayer - otherwise it is redundant to check if imageLayer is null at line 259
[src/osgVolume/RayTracedTechnique.cpp:275]: (error) Possible null pointer dereference: imageLayer - otherwise it is redundant to check if imageLayer is null at line 259
[src/osgWrappers/serializers/osg/ShaderBinary.cpp:28]: (error) Mismatching allocation and deallocation: data
This commit is contained in:
Robert Osfield 2011-06-20 19:15:53 +00:00
parent 20f334b6f8
commit 7f9e1c5a6f
21 changed files with 178 additions and 98 deletions

View File

@ -41,7 +41,12 @@ bool PhotoArchive::readPhotoIndex(const std::string& filename)
char* fileIndentifier = new char [FILE_IDENTIFER.size()]; char* fileIndentifier = new char [FILE_IDENTIFER.size()];
in.read(fileIndentifier,FILE_IDENTIFER.size()); in.read(fileIndentifier,FILE_IDENTIFER.size());
if (FILE_IDENTIFER!=fileIndentifier) return false; if (FILE_IDENTIFER!=fileIndentifier)
{
delete [] fileIndentifier;
return false;
}
delete [] fileIndentifier;
unsigned int numPhotos; unsigned int numPhotos;
in.read((char*)&numPhotos,sizeof(numPhotos)); in.read((char*)&numPhotos,sizeof(numPhotos));
@ -231,9 +236,9 @@ void PhotoArchive::buildArchive(const std::string& filename, const FileNameList&
if (status!=0) if (status!=0)
{ {
delete [] newData; delete [] newData;
osg::notify(osg::WARN) << "Error scaleImage() did not succeed : errorString = "<<osg::gluErrorString((GLenum)status)<<std::endl; osg::notify(osg::WARN) << "Error scaleImage() did not succeed : errorString = "<<osg::gluErrorString((GLenum)status)<<std::endl;
return;
} }
// now set up the photo header. // now set up the photo header.
@ -298,9 +303,9 @@ void PhotoArchive::buildArchive(const std::string& filename, const FileNameList&
if (status!=0) if (status!=0)
{ {
delete [] newData; delete [] newData;
osg::notify(osg::WARN) << "Error scaleImage() did not succeed : errorString = "<<osg::gluErrorString((GLenum)status)<<std::endl; osg::notify(osg::WARN) << "Error scaleImage() did not succeed : errorString = "<<osg::gluErrorString((GLenum)status)<<std::endl;
return;
} }
ImageHeader imageHeader; ImageHeader imageHeader;

View File

@ -549,8 +549,10 @@ osg::Image* InputStream::readImage(bool readFromExternal)
{ {
char* data = new char[size]; char* data = new char[size];
if ( !data ) if ( !data )
{
throwException( "InputStream::readImage(): Out of memory." ); throwException( "InputStream::readImage(): Out of memory." );
if ( getException() ) return NULL; if ( getException() ) return NULL;
}
readCharArray( data, size ); readCharArray( data, size );
std::string ext = osgDB::getFileExtension( name ); std::string ext = osgDB::getFileExtension( name );

View File

@ -389,8 +389,10 @@ void OutputStream::writeImage( const osg::Image* img )
{ {
char* data = new char[size]; char* data = new char[size];
if ( !data ) if ( !data )
{
throwException( "OutputStream::writeImage(): Out of memory." ); throwException( "OutputStream::writeImage(): Out of memory." );
if ( getException() ) return; if ( getException() ) return;
}
infile.seekg( 0, std::ios::beg ); infile.seekg( 0, std::ios::beg );
infile.read( data, size ); infile.read( data, size );

View File

@ -653,7 +653,7 @@ static void postProcessField(const SbIntList &runLengths, osg::PrimitiveSet::Mod
field->finishEditing(); field->finishEditing();
// free resources // free resources
delete tmpArray; delete [] tmpArray;
} }

View File

@ -234,7 +234,13 @@ ReaderWriterIV::readNode(std::istream& fin,
dataSize += fin.gcount(); dataSize += fin.gcount();
if (bufSize == dataSize) { if (bufSize == dataSize) {
bufSize *= 2; bufSize *= 2;
buf = (char*)realloc(buf, bufSize); char* new_buf = (char*)realloc(buf, bufSize);
if (!new_buf)
{
free(buf);
return osgDB::ReaderWriter::ReadResult::INSUFFICIENT_MEMORY_TO_LOAD;
}
buf = new_buf;
} }
} }
input.setBuffer(buf, dataSize); input.setBuffer(buf, dataSize);

View File

@ -24,6 +24,7 @@
#include <memory.h> #include <memory.h>
#include <stdlib.h> #include <stdlib.h>
#include <iostream> #include <iostream>
#include <sstream>
#include "CameraConfig.h" #include "CameraConfig.h"
@ -632,7 +633,8 @@ bool CameraConfig::defaultConfig()
for( unsigned int i = 0; i < numScreens; i++ ) for( unsigned int i = 0; i < numScreens; i++ )
{ {
std::string name = "Screen" + i; std::stringstream sstr; sstr<<"Screen"<<i;
std::string name = sstr.str();
std::pair<std::map<std::string, osg::ref_ptr<Camera> >::iterator,bool> res = std::pair<std::map<std::string, osg::ref_ptr<Camera> >::iterator,bool> res =
_camera_map.insert(std::pair<std::string, osg::ref_ptr<Camera> >(name, new Camera)); _camera_map.insert(std::pair<std::string, osg::ref_ptr<Camera> >(name, new Camera));

View File

@ -119,6 +119,7 @@ FT_Byte* FreeTypeLibrary::getFace(std::istream& fontstream, unsigned int index,
if (!fontstream || (static_cast<std::streampos>(fontstream.gcount()) != length)) if (!fontstream || (static_cast<std::streampos>(fontstream.gcount()) != length))
{ {
OSG_WARN<<" .... the font file could not be read from its stream"<<std::endl; OSG_WARN<<" .... the font file could not be read from its stream"<<std::endl;
if (buffer) delete [] buffer;
return 0; return 0;
} }
args.flags = FT_OPEN_MEMORY; args.flags = FT_OPEN_MEMORY;

View File

@ -58,11 +58,37 @@
// //
geoHeaderGeo::geoHeaderGeo() geoHeaderGeo::geoHeaderGeo()
{ // animations for the header - actually updates all control variables { // animations for the header - actually updates all control variables
intVars=new internalVars; useVars=new userVars; intVars=new internalVars;
useVars=new userVars;
extVars=new userVars; extVars=new userVars;
_initialTick = _timer.tick();
color_palette=new colourPalette; color_palette=new colourPalette;
_initialTick = _timer.tick();
} }
geoHeaderGeo::geoHeaderGeo(const geoHeaderGeo &geo,const osg::CopyOp& copyop) :
geoHeader(geo,copyop)
{
intVars=new internalVars(*geo.intVars);
useVars=new userVars(*geo.useVars);
extVars=new userVars(*geo.extVars);
color_palette=new colourPalette;
_initialTick = _timer.tick();
}
geoHeaderGeo::~geoHeaderGeo()
{
delete intVars;
delete useVars;
delete extVars;
if (color_palette)
{
color_palette->clear();
delete color_palette;
}
}
const geoValue *geoHeaderGeo::getGeoVar(const unsigned fid) const { const geoValue *geoHeaderGeo::getGeoVar(const unsigned fid) const {
const geoValue *st=intVars->getGeoVar(fid); const geoValue *st=intVars->getGeoVar(fid);
if (!st) { if (!st) {
@ -207,37 +233,50 @@ public:
int shademodel=gfshade ? gfshade->getInt() : -1; int shademodel=gfshade ? gfshade->getInt() : -1;
if (shademodel!=GEO_POLY_SHADEMODEL_LIT && shademodel!=GEO_POLY_SHADEMODEL_FLAT) { if (shademodel!=GEO_POLY_SHADEMODEL_LIT && shademodel!=GEO_POLY_SHADEMODEL_FLAT) {
const geoField *gfd=gr->getField(GEO_DB_VRTX_NORMAL); const geoField *gfd=gr->getField(GEO_DB_VRTX_NORMAL);
if (gfd->getType()==DB_UINT) { if (gfd)
if (gfd) { {
if (gfd->getType()==DB_UINT)
{
unsigned int idx=gfd->getUInt(); unsigned int idx=gfd->getUInt();
normindices->push_back(idx); normindices->push_back(idx);
norms->push_back((*npool)[idx]); norms->push_back((*npool)[idx]);
} else { }
else if (gfd->getType()==DB_VEC3F)
{
float *p=gfd->getVec3Arr();
osg::Vec3 nrm;
nrm.set(p[0],p[1],p[2]);
norms->push_back(nrm);
}
else
{
OSG_WARN << "No valid vertex index" << std::endl; OSG_WARN << "No valid vertex index" << std::endl;
} }
} else if (gfd->getType()==DB_VEC3F) {
float *p=gfd->getVec3Arr();
osg::Vec3 nrm;
nrm.set(p[0],p[1],p[2]);
norms->push_back(nrm);
} }
} }
const geoField *gfd=gr->getField(GEO_DB_VRTX_COORD);
osg::Vec3 pos; osg::Vec3 pos;
if (gfd->getType()==DB_INT) { const geoField *gfd=gr->getField(GEO_DB_VRTX_COORD);
if (gfd) { if (gfd)
int idx=gfd->getInt(); {
if (gfd->getType()==DB_INT)
{
int idx=gfd->getInt();
pos=(*cpool)[idx]; pos=(*cpool)[idx];
coords->push_back((*cpool)[idx]); //osg::Vec3(cpool[3*idx],cpool[3*idx+1],cpool[3*idx+2])); coords->push_back((*cpool)[idx]); //osg::Vec3(cpool[3*idx],cpool[3*idx+1],cpool[3*idx+2]));
coordindices->push_back(coords->size()); coordindices->push_back(coords->size());
} else { }
else if (gfd->getType()==DB_VEC3F)
{
float *p=gfd->getVec3Arr();
pos.set(p[0],p[1],p[2]);
coords->push_back(pos); //osg::Vec3(cpool[3*idx],cpool[3*idx+1],cpool[3*idx+2]));
}
else
{
OSG_WARN << "No valid vertex index" << std::endl; OSG_WARN << "No valid vertex index" << std::endl;
} }
} else if (gfd->getType()==DB_VEC3F) {
float *p=gfd->getVec3Arr();
pos.set(p[0],p[1],p[2]);
coords->push_back(pos); //osg::Vec3(cpool[3*idx],cpool[3*idx+1],cpool[3*idx+2]));
} }
std::vector< georecord *>bhv=gr->getBehaviour(); // behaviours for vertices, eg tranlate, colour! std::vector< georecord *>bhv=gr->getBehaviour(); // behaviours for vertices, eg tranlate, colour!
if (!bhv.empty()) { if (!bhv.empty()) {
int ncoord=coords->size(); int ncoord=coords->size();
@ -898,19 +937,24 @@ class ReaderGEO
(*itr)->getType()==DB_DSK_FAT_VERTEX || (*itr)->getType()==DB_DSK_FAT_VERTEX ||
(*itr)->getType()==DB_DSK_SLIM_VERTEX) (*itr)->getType()==DB_DSK_SLIM_VERTEX)
{ // light point vertices { // light point vertices
const geoField *gfd=(*itr)->getField(GEO_DB_VRTX_COORD);
osg::Vec3 pos; osg::Vec3 pos;
if (gfd->getType()==DB_INT) { const geoField *gfd=(*itr)->getField(GEO_DB_VRTX_COORD);
if (gfd) { if (gfd) {
int idx=gfd->getInt(); if (gfd->getType()==DB_INT)
pos=coord_pool[idx]; {
} else { int idx=gfd->getInt();
pos=coord_pool[idx];
}
else if (gfd->getType()==DB_VEC3F)
{
float *p=gfd->getVec3Arr();
pos.set(p[0],p[1],p[2]);
}
else {
OSG_WARN << "No valid vertex index" << std::endl; OSG_WARN << "No valid vertex index" << std::endl;
} }
} else if (gfd->getType()==DB_VEC3F) {
float *p=gfd->getVec3Arr();
pos.set(p[0],p[1],p[2]);
} }
gfd=(*itr)->getField(GEO_DB_VRTX_PACKED_COLOR); gfd=(*itr)->getField(GEO_DB_VRTX_PACKED_COLOR);
if (gfd) { if (gfd) {
unsigned char *cls=gfd->getUCh4Arr(); unsigned char *cls=gfd->getUCh4Arr();

View File

@ -131,12 +131,8 @@ class geoHeaderGeo: public geoHeader {
// including animation variables. // including animation variables.
public: public:
geoHeaderGeo(); geoHeaderGeo();
~geoHeaderGeo() { color_palette->clear(); } geoHeaderGeo(const geoHeaderGeo &geo,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY);
geoHeaderGeo(const geoHeaderGeo &geo,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY) :
geoHeader(geo,copyop){
intVars=new internalVars(*geo.intVars); useVars=new userVars(*geo.useVars);
extVars=new userVars(*geo.extVars);
}
void addInternalVars(const georecord &gr) { intVars->addInternalVars(gr);} void addInternalVars(const georecord &gr) { intVars->addInternalVars(gr);}
internalVars *getInternalVars(void) const { return intVars;} internalVars *getInternalVars(void) const { return intVars;}
const std::string getVarname(const unsigned fid) const { const std::string getVarname(const unsigned fid) const {
@ -174,14 +170,18 @@ public:
} }
void addColour(unsigned char *cpal) {(*color_palette).push_back(cpal);} void addColour(unsigned char *cpal) {(*color_palette).push_back(cpal);}
inline colourPalette *getColorPalette() const { return color_palette;} inline colourPalette *getColorPalette() const { return color_palette;}
protected:
virtual ~geoHeaderGeo();
private: private:
osg::Timer_t _lastFrameTick,_initialTick; void moveit(const double t);
osg::Timer _timer; osg::Timer_t _lastFrameTick,_initialTick;
internalVars *intVars; osg::Timer _timer;
userVars *useVars; internalVars *intVars;
userVars *extVars; userVars *useVars;
void moveit(const double t); userVars *extVars;
colourPalette *color_palette; // the colour palette - used in colour animations colourPalette *color_palette; // the colour palette - used in colour animations
}; };
#endif #endif

View File

@ -153,7 +153,6 @@ load_md2 (const char *filename, const osgDB::ReaderWriter::Options* options)
{ {
struct stat st; struct stat st;
void *mapbase; void *mapbase;
// void *p;
int file_fd; int file_fd;
osg::Node* result = NULL; osg::Node* result = NULL;
@ -163,23 +162,23 @@ load_md2 (const char *filename, const osgDB::ReaderWriter::Options* options)
file_fd = open (filename, O_RDONLY); file_fd = open (filename, O_RDONLY);
if (file_fd <= 0) { if (file_fd <= 0) {
return NULL;
}
#if 0
mapbase = mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, file_fd, 0);
if (mapbase == NULL) {
close (file_fd); close (file_fd);
return NULL; return NULL;
} }
#else
mapbase = malloc (st.st_size); mapbase = malloc (st.st_size);
if (read(file_fd, mapbase, st.st_size)==0) if (!mapbase)
{ {
close (file_fd); close (file_fd);
return NULL; return NULL;
} }
#endif
if (read(file_fd, mapbase, st.st_size)==0)
{
close (file_fd);
if (mapbase) free(mapbase);
return NULL;
}
if (g_md2NormalsArray == NULL) { if (g_md2NormalsArray == NULL) {
g_md2NormalsArray = new osg::Vec3Array; g_md2NormalsArray = new osg::Vec3Array;

View File

@ -149,8 +149,8 @@ int *numComponents_ret)
if (tmpbuf == NULL || buffer == NULL) if (tmpbuf == NULL || buffer == NULL)
{ {
picerror = ERROR_MEMORY; picerror = ERROR_MEMORY;
if (tmpbuf) free(tmpbuf); if (tmpbuf) delete [] tmpbuf;
if (buffer) free(buffer); if (buffer) delete [] buffer;
fclose(fp); fclose(fp);
return NULL; return NULL;
} }

View File

@ -828,6 +828,8 @@ PlyFile *ply_read(FILE *fp, int *nelems, char ***elem_names)
/* create record for this object */ /* create record for this object */
plyfile = (PlyFile *) myalloc (sizeof (PlyFile)); plyfile = (PlyFile *) myalloc (sizeof (PlyFile));
if (!plyfile) return (NULL);
plyfile->nelems = 0; plyfile->nelems = 0;
plyfile->comments = NULL; plyfile->comments = NULL;
plyfile->num_comments = 0; plyfile->num_comments = 0;
@ -840,15 +842,25 @@ PlyFile *ply_read(FILE *fp, int *nelems, char ***elem_names)
words = get_words (plyfile->fp, &nwords, &orig_line); words = get_words (plyfile->fp, &nwords, &orig_line);
if (!words || !equal_strings (words[0], "ply")) if (!words || !equal_strings (words[0], "ply"))
{
if (words) free( words);
free( plyfile );
return (NULL); return (NULL);
}
while (words) { while (words)
{
/* parse words */ /* parse words */
if (equal_strings (words[0], "format")) { if (equal_strings (words[0], "format"))
{
if (nwords != 3) if (nwords != 3)
{
free( words );
free( plyfile );
return (NULL); return (NULL);
}
if (equal_strings (words[1], "ascii")) if (equal_strings (words[1], "ascii"))
plyfile->file_type = PLY_ASCII; plyfile->file_type = PLY_ASCII;
else if (equal_strings (words[1], "binary_big_endian")) else if (equal_strings (words[1], "binary_big_endian"))
@ -856,10 +868,11 @@ PlyFile *ply_read(FILE *fp, int *nelems, char ***elem_names)
else if (equal_strings (words[1], "binary_little_endian")) else if (equal_strings (words[1], "binary_little_endian"))
plyfile->file_type = PLY_BINARY_LE; plyfile->file_type = PLY_BINARY_LE;
else else
{ {
free (words); free( words );
free( plyfile );
return (NULL); return (NULL);
} }
plyfile->version = osg::asciiToDouble (words[2]); plyfile->version = osg::asciiToDouble (words[2]);
} }
else if (equal_strings (words[0], "element")) else if (equal_strings (words[0], "element"))
@ -871,10 +884,10 @@ PlyFile *ply_read(FILE *fp, int *nelems, char ***elem_names)
else if (equal_strings (words[0], "obj_info")) else if (equal_strings (words[0], "obj_info"))
add_obj_info (plyfile, orig_line); add_obj_info (plyfile, orig_line);
else if (equal_strings (words[0], "end_header")) else if (equal_strings (words[0], "end_header"))
{ {
free (words); free (words);
break; break;
} }
/* free up words space */ /* free up words space */
free (words); free (words);

View File

@ -172,11 +172,18 @@ public:
else else
hasAlpha = false; hasAlpha = false;
osg::Image *image = new osg::Image; osg::ref_ptr<osg::Image> image = new osg::Image;
unsigned char *imageData = new unsigned char[header.dataLength]; if (!image) return ReadResult::INSUFFICIENT_MEMORY_TO_LOAD;
unsigned char *imageData = new unsigned char[header.dataLength];
if (!imageData) return ReadResult::INSUFFICIENT_MEMORY_TO_LOAD;
fin.read((char*)imageData, header.dataLength); fin.read((char*)imageData, header.dataLength);
if(!fin.good()) if(!fin.good())
{
delete [] imageData;
return ReadResult::ERROR_IN_READING_FILE; return ReadResult::ERROR_IN_READING_FILE;
}
image->setImage(header.width, header.height, 1, image->setImage(header.width, header.height, 1,
internalFormat, internalFormat, internalFormat, internalFormat,
@ -227,7 +234,7 @@ public:
if(!mipmapdata.empty()) if(!mipmapdata.empty())
image->setMipmapLevels(mipmapdata); image->setMipmapLevels(mipmapdata);
return image; return image.get();
} }
osg::notify(osg::WARN) << "Failed to read pvr data." << std::endl; osg::notify(osg::WARN) << "Failed to read pvr data." << std::endl;

View File

@ -25,6 +25,7 @@ ESRIShapeParser::ESRIShapeParser( const std::string fileName, bool useDouble ):
if( (fd = open( fileName.c_str(), O_RDONLY )) <= 0 ) if( (fd = open( fileName.c_str(), O_RDONLY )) <= 0 )
#endif #endif
{ {
if (fd) close ( fd );
perror( fileName.c_str() ); perror( fileName.c_str() );
return ; return ;
} }

View File

@ -93,7 +93,8 @@ XBaseParser::XBaseParser(const std::string fileName):
#endif #endif
{ {
perror( fileName.c_str() ); perror( fileName.c_str() );
return ; if (fd) close( fd );
return;
} }
} }

View File

@ -3147,17 +3147,18 @@ unzFile unzOpenInternal(LUFILE *fin)
// return UNZ_OK if there is no problem. // return UNZ_OK if there is no problem.
int unzClose (unzFile file) int unzClose (unzFile file)
{ {
unz_s* s;
if (file==NULL) if (file==NULL)
return UNZ_PARAMERROR; return UNZ_PARAMERROR;
s=(unz_s*)file;
unz_s* s=(unz_s*)file;
if (s->pfile_in_zip_read!=NULL) if (s->pfile_in_zip_read!=NULL)
unzCloseCurrentFile(file); unzCloseCurrentFile(file);
lufclose(s->file); lufclose(s->file);
if (s) zfree(s); // unused s=0; zfree(s);
return UNZ_OK; return UNZ_OK;
} }
@ -4144,15 +4145,18 @@ ZRESULT TUnzip::Find(const TCHAR *tname,bool ic,int *index,ZIPENTRY *ze)
void EnsureDirectory(const TCHAR *rootdir, const TCHAR *dir) void EnsureDirectory(const TCHAR *rootdir, const TCHAR *dir)
{ // first check that rootdir exists. nb. rootdir has a trailing slash { // first check that rootdir exists. nb. rootdir has a trailing slash
if (rootdir!=0) if (rootdir!=0)
{ TCHAR rd[MAX_PATH]; { TCHAR rd[MAX_PATH+1];
#ifdef ZIP_STD #ifdef ZIP_STD
strncpy(rd,rootdir,MAX_PATH); strncpy(rd,rootdir,MAX_PATH);
#else #else
_tcsncpy_s(rd,MAX_PATH,rootdir,MAX_PATH); _tcsncpy_s(rd,MAX_PATH,rootdir,MAX_PATH);
#endif #endif
// make sure there rd is always null terminated
rd[MAX_PATH] = 0;
size_t len=_tcslen(rd); size_t len=_tcslen(rd);
if (len>0 && (rd[len-1]=='/' || rd[len-1]=='\\')) rd[len-1]=0; if (len>0 && (rd[len-1]=='/' || rd[len-1]=='\\')) rd[len-1]=0;
#ifdef ZIP_STD #ifdef ZIP_STD
if (!FileExists(rd)) lumkdir(rd); if (!FileExists(rd)) lumkdir(rd);

View File

@ -328,7 +328,7 @@ osg::BoundingBox MinimalCullBoundsShadowMap::ViewData::ComputeRenderLeavesBounds
// Don't trust already computed bounds for cull generated drawables // Don't trust already computed bounds for cull generated drawables
// LightPointDrawable & LightPointSpriteDrawable are such examples // LightPointDrawable & LightPointSpriteDrawable are such examples
// they store wrong recorded bounds from very first pass // they store wrong recorded bounds from very first pass
if( rl && rl->_modelview == NULL ) if(rl->_modelview == NULL )
rl->_drawable->dirtyBound(); rl->_drawable->dirtyBound();
bb = rl->_drawable->getBound(); bb = rl->_drawable->getBound();

View File

@ -606,9 +606,10 @@ ScreenCaptureHandler::CaptureOperation* ScreenCaptureHandler::getCaptureOperatio
void ScreenCaptureHandler::addCallbackToViewer(osgViewer::ViewerBase& viewer) void ScreenCaptureHandler::addCallbackToViewer(osgViewer::ViewerBase& viewer)
{ {
osg::Camera* camera = findAppropriateCameraForCallback(viewer); osg::Camera* camera = findAppropriateCameraForCallback(viewer);
if (!camera) return;
WindowCaptureCallback* callback = static_cast<WindowCaptureCallback*>(_callback.get()); WindowCaptureCallback* callback = static_cast<WindowCaptureCallback*>(_callback.get());
if (camera && callback->getFramePosition() == WindowCaptureCallback::START_FRAME) if (callback && callback->getFramePosition() == WindowCaptureCallback::START_FRAME)
{ {
camera->setInitialDrawCallback(_callback.get()); camera->setInitialDrawCallback(_callback.get());
} }
@ -621,9 +622,10 @@ void ScreenCaptureHandler::addCallbackToViewer(osgViewer::ViewerBase& viewer)
void ScreenCaptureHandler::removeCallbackFromViewer(osgViewer::ViewerBase& viewer) void ScreenCaptureHandler::removeCallbackFromViewer(osgViewer::ViewerBase& viewer)
{ {
osg::Camera* camera = findAppropriateCameraForCallback(viewer); osg::Camera* camera = findAppropriateCameraForCallback(viewer);
if (!camera) return;
WindowCaptureCallback* callback = static_cast<WindowCaptureCallback*>(_callback.get()); WindowCaptureCallback* callback = static_cast<WindowCaptureCallback*>(_callback.get());
if (camera && callback->getFramePosition() == WindowCaptureCallback::START_FRAME) if (callback && callback->getFramePosition() == WindowCaptureCallback::START_FRAME)
{ {
camera->setInitialDrawCallback(0); camera->setInitialDrawCallback(0);
} }

View File

@ -207,6 +207,7 @@ void Locator::removeCallback(LocatorCallback* callback)
if (*itr == callback) if (*itr == callback)
{ {
_locatorCallbacks.erase(itr); _locatorCallbacks.erase(itr);
return;
} }
} }
} }

View File

@ -269,16 +269,6 @@ void RayTracedTechnique::init()
osg::ref_ptr<osg::Texture1D> tf_texture = new osg::Texture1D; osg::ref_ptr<osg::Texture1D> tf_texture = new osg::Texture1D;
tf_texture->setImage(tf->getImage()); tf_texture->setImage(tf->getImage());
#if 1
osgDB::writeImageFile(*(tf->getImage()),"tf.png");
OSG_NOTICE<<"imageLayer->getTexelOffset()[3]="<<imageLayer->getTexelOffset()[3]<<std::endl;
OSG_NOTICE<<"imageLayer->getTexelScale()[3]="<<imageLayer->getTexelScale()[3]<<std::endl;
OSG_NOTICE<<"tfOffset="<<tfOffset<<std::endl;
OSG_NOTICE<<"tfScale="<<tfScale<<std::endl;
OSG_NOTICE<<"tf->getMinimum()="<<tf->getMinimum()<<std::endl;
OSG_NOTICE<<"tf->getMaximum()="<<tf->getMaximum()<<std::endl;
#endif
tf_texture->setResizeNonPowerOfTwoHint(false); tf_texture->setResizeNonPowerOfTwoHint(false);
tf_texture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR); tf_texture->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR);
tf_texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR); tf_texture->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);

View File

@ -25,7 +25,7 @@ static bool readData( osgDB::InputStream& is, osg::ShaderBinary& sb )
is >> osgDB::END_BRACKET; is >> osgDB::END_BRACKET;
} }
sb.assign( size, (unsigned char*)data ); sb.assign( size, (unsigned char*)data );
delete data; delete [] data;
return true; return true;
} }