Pārlūkot izejas kodu

Merge branch 'release/1.10.x' into master

rdb 2 gadi atpakaļ
vecāks
revīzija
1c37522026

+ 3 - 2
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;
 }
 
 /**

+ 1 - 1
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();
 

+ 1 - 1
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;
 }
 

+ 0 - 2
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.

+ 1 - 1
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;
 }
 

+ 10 - 9
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);
 }
 
 /**

+ 1 - 1
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;

+ 4 - 4
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);

+ 8 - 1
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;
 }
 

+ 6 - 9
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;
   }