diff --git a/contrib/src/ai/aiWorld.cxx b/contrib/src/ai/aiWorld.cxx index bbdf894e13..074a93ac69 100644 --- a/contrib/src/ai/aiWorld.cxx +++ b/contrib/src/ai/aiWorld.cxx @@ -99,8 +99,9 @@ Flock AIWorld::get_flock(unsigned int flock_id) { return *_flock_pool[i]; } } - Flock *null_flock = nullptr; - return *null_flock; + static Flock null_flock(0, 0.0, 0.0, 0, 0, 0); + nassertr(false, null_flock); + return null_flock; } /** diff --git a/dtool/src/cppparser/cppInstance.cxx b/dtool/src/cppparser/cppInstance.cxx index 4a55adab5f..7de5798729 100644 --- a/dtool/src/cppparser/cppInstance.cxx +++ b/dtool/src/cppparser/cppInstance.cxx @@ -348,7 +348,7 @@ check_for_constructor(CPPScope *current_scope, CPPScope *global_scope) { } CPPFunctionType *func = _type->as_function_type(); - if (func != nullptr) { + if (func != nullptr && scope != nullptr) { string method_name = get_local_name(scope); string class_name = scope->get_local_name(); diff --git a/dtool/src/prc/encryptStreamBuf.cxx b/dtool/src/prc/encryptStreamBuf.cxx index 807527c5cc..a7020296f6 100644 --- a/dtool/src/prc/encryptStreamBuf.cxx +++ b/dtool/src/prc/encryptStreamBuf.cxx @@ -485,9 +485,9 @@ sync() { size_t n = pptr() - pbase(); write_chars(pbase(), n); pbump(-(int)n); + _dest->flush(); } - _dest->flush(); return 0; } diff --git a/panda/src/express/multifile.cxx b/panda/src/express/multifile.cxx index 8179a76fa5..a54e76cac7 100644 --- a/panda/src/express/multifile.cxx +++ b/panda/src/express/multifile.cxx @@ -2280,8 +2280,6 @@ read_index() { read_cert_special = true; } else { _subfiles.push_back(subfile); - } - if (!subfile->is_cert_special()) { if (bytes_skipped != 0) { // If the index entries don't follow exactly sequentially (except for // the cert special files), the file ought to be repacked. diff --git a/panda/src/express/zStreamBuf.cxx b/panda/src/express/zStreamBuf.cxx index 3940716004..be2b68fda8 100644 --- a/panda/src/express/zStreamBuf.cxx +++ b/panda/src/express/zStreamBuf.cxx @@ -267,9 +267,9 @@ sync() { size_t n = pptr() - pbase(); write_chars(pbase(), n, Z_SYNC_FLUSH); pbump(-(int)n); + _dest->flush(); } - _dest->flush(); return 0; } diff --git a/panda/src/gobj/geomVertexArrayFormat.cxx b/panda/src/gobj/geomVertexArrayFormat.cxx index 4b0c2d53c9..83ee144897 100644 --- a/panda/src/gobj/geomVertexArrayFormat.cxx +++ b/panda/src/gobj/geomVertexArrayFormat.cxx @@ -551,8 +551,8 @@ get_format_string(bool pad) const { } // Synthesize the format string. - char *fmt = (char*) malloc(row_size + 1); - memset((void*) fmt, 0, row_size + 1); + char *fmt = (char *)alloca(row_size + 1); + memset((void *)fmt, 0, row_size + 1); int fi = 0; int offset = 0; @@ -566,6 +566,7 @@ get_format_string(bool pad) const { } char fmt_code = 'x'; + int num_components = column->get_num_components(); switch (column->get_numeric_type()) { case NT_uint8: fmt_code = 'B'; @@ -578,6 +579,7 @@ get_format_string(bool pad) const { case NT_uint32: case NT_packed_dcba: case NT_packed_dabc: + case NT_packed_ufloat: fmt_code = 'I'; break; @@ -604,22 +606,21 @@ get_format_string(bool pad) const { default: gobj_cat.error() << "Unknown numeric type " << column->get_numeric_type() << "!\n"; - return nullptr; + num_components *= column->get_component_bytes(); } - memset((void*) (fmt + fi), fmt_code, column->get_num_components()); + memset((void*) (fmt + fi), fmt_code, num_components); offset += column->get_total_bytes(); - fi += column->get_num_components(); + fi += num_components; } if (offset < row_size) { // Add padding bytes. int pad = row_size - offset; - memset((void*) (fmt + fi), 'x', pad); + memset((void *)(fmt + fi), 'x', pad); + ++fi; } - std::string fmt_string (fmt); - free(fmt); - return fmt_string; + return std::string(fmt, (size_t)fi); } /** diff --git a/panda/src/pgraph/cullTraverserData.h b/panda/src/pgraph/cullTraverserData.h index b9202d8cb5..0bf2e5fe97 100644 --- a/panda/src/pgraph/cullTraverserData.h +++ b/panda/src/pgraph/cullTraverserData.h @@ -93,7 +93,7 @@ private: // We store a chain leading all the way to the root, so that we can compose // a NodePath. We may be able to eliminate this requirement in the future. const CullTraverserData *_next; - NodePathComponent *_start; + NodePathComponent *_start; // NOLINT(*.UninitializedObject) public: PandaNodePipelineReader _node_reader; diff --git a/panda/src/pnmimage/pnmimage_base.cxx b/panda/src/pnmimage/pnmimage_base.cxx index f30939575d..d037750088 100644 --- a/panda/src/pnmimage/pnmimage_base.cxx +++ b/panda/src/pnmimage/pnmimage_base.cxx @@ -35,11 +35,11 @@ pm_message(const char *format, ...) { char buffer[buffer_size]; vsnprintf(buffer, buffer_size, format, ap); + va_end(ap); + nassertv(strlen(buffer) < buffer_size); pnmimage_cat.info() << buffer << "\n"; - - va_end(ap); } /** @@ -55,12 +55,12 @@ pm_error(const char *format, ...) { char buffer[buffer_size]; vsnprintf(buffer, buffer_size, format, ap); + va_end(ap); + nassertv(strlen(buffer) < buffer_size); pnmimage_cat.error() << buffer << "\n"; - va_end(ap); - // Now we're supposed to exit. Inconvenient if we were running Panda // interactively, but that's the way it is. exit(1); diff --git a/panda/src/pnmimagetypes/pnmFileTypeTIFF.cxx b/panda/src/pnmimagetypes/pnmFileTypeTIFF.cxx index 87dc82e3a0..170d13af46 100644 --- a/panda/src/pnmimagetypes/pnmFileTypeTIFF.cxx +++ b/panda/src/pnmimagetypes/pnmFileTypeTIFF.cxx @@ -1074,7 +1074,7 @@ write_data(xel *array, xelval *alpha) { break; } - buf = (unsigned char*) malloc( bytesperrow ); + buf = (unsigned char*) alloca( bytesperrow ); if ( buf == nullptr ) { pnmimage_tiff_cat.error() << "Can't allocate memory for row buffer\n"; @@ -1145,6 +1145,9 @@ write_data(xel *array, xelval *alpha) { pnmimage_tiff_cat.error() << "Internal error: color not found?!? row=" << row << " col=" << col << "\n"; + if (cht != nullptr) { + ppm_freecolorhash(cht); + } return 0; } *tP++ = (unsigned char) s; @@ -1188,6 +1191,10 @@ write_data(xel *array, xelval *alpha) { TIFFFlushData( tif ); TIFFClose( tif ); + if (cht != nullptr) { + ppm_freecolorhash(cht); + } + return _y_size; } diff --git a/panda/src/putil/simpleHashMap.I b/panda/src/putil/simpleHashMap.I index d33b8bad34..6c61aaeea7 100644 --- a/panda/src/putil/simpleHashMap.I +++ b/panda/src/putil/simpleHashMap.I @@ -537,11 +537,10 @@ validate() const { size_t index = (size_t)index_array[slot]; ++count; if (index >= _num_entries) { - util_cat.error() + write(util_cat->error() << "SimpleHashMap " << this << " is invalid: slot " << slot << " contains index " << index << " which is past the end of the" - " table\n"; - write(util_cat.error(false)); + " table\n"); return false; } nassertd(index < _num_entries) continue; @@ -551,21 +550,19 @@ validate() const { wants_slot = next_hash(wants_slot); } if (wants_slot != slot) { - util_cat.error() + write(util_cat->error() << "SimpleHashMap " << this << " is invalid: key " << _table[index]._key << " should be in slot " << wants_slot - << " instead of " << slot << " (ideal is " << ideal_slot << ")\n"; - write(util_cat.error(false)); + << " instead of " << slot << " (ideal is " << ideal_slot << ")\n"); return false; } } } if (count != _num_entries) { - util_cat.error() + write(util_cat->error() << "SimpleHashMap " << this << " is invalid: reports " << _num_entries - << " entries, actually has " << count << "\n"; - write(util_cat.error(false)); + << " entries, actually has " << count << "\n"); return false; }