misc: Fix issues identified by static analysis
authorAndreas Hansson <andreas.hansson@arm.com>
Wed, 1 Oct 2014 12:05:54 +0000 (08:05 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Wed, 1 Oct 2014 12:05:54 +0000 (08:05 -0400)
Another bunch of issues addressed.

src/base/loader/object_file.cc
src/base/statistics.hh
src/base/vnc/vncserver.cc
src/mem/ruby/system/System.cc
src/sim/sim_object.cc
src/sim/sim_object.hh

index 170e18d5e5e7aec1ddd6cabcf29157d101215c0d..29cea8ccfbcc81d6c04fcbe925e12350471b5bfc 100644 (file)
@@ -54,7 +54,8 @@ ObjectFile::ObjectFile(const string &_filename, int _fd,
                        size_t _len, uint8_t *_data,
                        Arch _arch, OpSys _opSys)
     : filename(_filename), descriptor(_fd), fileData(_data), len(_len),
-      arch(_arch), opSys(_opSys), globalPtr(0)
+      arch(_arch), opSys(_opSys), entry(0), globalPtr(0),
+      text{0, nullptr, 0}, data{0, nullptr, 0}, bss{0, nullptr, 0}
 {
 }
 
@@ -116,7 +117,9 @@ createObjectFile(const string &fname, bool raw)
     }
 
     // find the length of the file by seeking to the end
-    size_t len = (size_t)lseek(fd, 0, SEEK_END);
+    off_t off = lseek(fd, 0, SEEK_END);
+    fatal_if(off < 0, "Failed to determine size of object file %s\n", fname);
+    size_t len = static_cast<size_t>(off);
 
     // mmap the whole shebang
     uint8_t *fileData =
index 1b3d0fc54198ae085396d5555116d45ae35644b7..a6edde2f922dd8a36be652493374b3a04149bcee 100644 (file)
@@ -1361,7 +1361,8 @@ class DistStor
         /** The number of buckets. Equal to (max-min)/bucket_size. */
         size_type buckets;
 
-        Params() : DistParams(Dist) {}
+        Params() : DistParams(Dist), min(0), max(0), bucket_size(0),
+                   buckets(0) {}
     };
 
   private:
index e762ad1d40b3e848c0ae7a88eb004df4ede303a1..77a4316ab6850b0430096b79eb04fa347ee033d9 100644 (file)
@@ -184,6 +184,8 @@ VncServer::accept()
         panic("%s: cannot accept a connection if not listening!", name());
 
     int fd = listener.accept(true);
+    fatal_if(fd < 0, "%s: failed to accept VNC connection!", name());
+
     if (dataFd != -1) {
         char message[] = "vnc server already attached!\n";
         atomic_write(fd, message, sizeof(message));
@@ -643,7 +645,8 @@ VncServer::sendFrameBufferUpdate()
     assert(fbPtr);
 
     uint8_t *tmp = vc->convert(fbPtr);
-    write(tmp, videoWidth() * videoHeight() * sizeof(uint32_t));
+    uint64_t num_pixels = videoWidth() * videoHeight();
+    write(tmp, num_pixels * sizeof(uint32_t));
     delete [] tmp;
 
 }
index dad5b8aa620352bac1a126d9f957df7ce502e3bd..0675366d1866f4a7074869963a0ed49c76e28350 100644 (file)
@@ -153,7 +153,7 @@ RubySystem::writeCompressedTrace(uint8_t *raw_data, string filename,
     if (gzclose(compressedMemory)) {
         fatal("Close failed on memory trace file '%s'\n", filename);
     }
-    delete raw_data;
+    delete[] raw_data;
 }
 
 void
index 44d498c3c2c8ee131e447cc254a36047abeb6f32..a7be4ebd2cdfe3bc04d9a57fc990a127b7485d8e 100644 (file)
@@ -70,6 +70,11 @@ SimObject::SimObject(const Params *p)
     probeManager = new ProbeManager(this);
 }
 
+SimObject::~SimObject()
+{
+    delete probeManager;
+}
+
 void
 SimObject::init()
 {
index e4526e7738f07af643f74cbc265fef9311ba93cc..9bf95d07f473dd76f2c0ea3ec22bcbb67fd045c3 100644 (file)
@@ -101,7 +101,7 @@ class SimObject : public EventManager, public Serializable, public Drainable
     typedef SimObjectParams Params;
     const Params *params() const { return _params; }
     SimObject(const Params *_params);
-    virtual ~SimObject() {}
+    virtual ~SimObject();
 
   public: