Merge "simpleperf: fix deobfuscating Java symbols."
diff --git a/boottime_tools/bootio/bootio_collector.cpp b/boottime_tools/bootio/bootio_collector.cpp
index dc13525..037a3e2 100644
--- a/boottime_tools/bootio/bootio_collector.cpp
+++ b/boottime_tools/bootio/bootio_collector.cpp
@@ -66,7 +66,12 @@
 int ReadIo(char *filename, AppSample *sample) {
     FILE *file;
     char line[MAX_LINE];
-    unsigned int rchar, wchar, syscr, syscw, readbytes, writebytes;
+    unsigned int rchar = 0;
+    unsigned int wchar = 0;
+    unsigned int syscr = 0;
+    unsigned int syscw = 0;
+    unsigned int readbytes = 0;
+    unsigned int writebytes = 0;
 
     file = fopen(filename, "r");
     if (!file) return 1;
@@ -289,17 +294,17 @@
                    cpuLoad);
             isFirstSample = false;
         }
-        printf("-----------------------------------------------------------------------------\n");
+        if (!newerSample) {
+            LOG(ERROR) << "newerSample is null";
+        } else {
+            printf("-----------------------------------------------------------------------------"
+                   "\n");
 #define NUMBER "%-13" PRId64
-        printf("%-15s" NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER "\n",
+            printf("%-15s" NUMBER NUMBER NUMBER NUMBER NUMBER NUMBER "\n",
 #undef NUMBER
-               "Total",
-               newerSample->rchar(),
-               newerSample->wchar(),
-               newerSample->syscr(),
-               newerSample->syscw(),
-               newerSample->readbytes(),
-               newerSample->writebytes());
+                   "Total", newerSample->rchar(), newerSample->wchar(), newerSample->syscr(),
+                   newerSample->syscw(), newerSample->readbytes(), newerSample->writebytes());
+        }
     }
     printf("\nAggregations\n%-10s%-13s%-13s%-13s\n",
            "Total",
diff --git a/profcollectd/libprofcollectd/service.rs b/profcollectd/libprofcollectd/service.rs
index 3f33802..8ae5152 100644
--- a/profcollectd/libprofcollectd/service.rs
+++ b/profcollectd/libprofcollectd/service.rs
@@ -131,7 +131,7 @@
             log::info!("Config change detected, resetting profcollect.");
             clear_data()?;
 
-            write(*CONFIG_FILE, &new_config.to_string())?;
+            write(*CONFIG_FILE, new_config.to_string())?;
         }
 
         // Clear profile reports out of rentention period.
diff --git a/simpleperf/ETMDecoder.cpp b/simpleperf/ETMDecoder.cpp
index 7c2928c..5e2f92e 100644
--- a/simpleperf/ETMDecoder.cpp
+++ b/simpleperf/ETMDecoder.cpp
@@ -289,9 +289,14 @@
       // addr.
       if (!map->in_kernel) {
         data.buffer_map = map;
-        data.buffer = memory == nullptr ? nullptr : (memory->getBufferStart() + map->pgoff);
         data.buffer_start = map->start_addr;
         data.buffer_end = map->get_end_addr();
+        if (memory != nullptr && memory->getBufferSize() > map->pgoff &&
+            (memory->getBufferSize() - map->pgoff >= map->len)) {
+          data.buffer = memory->getBufferStart() + map->pgoff;
+        } else {
+          data.buffer = nullptr;
+        }
       }
     }
     *num_bytes = copy_size;