crash-reporter: Replace scoped_ptr<char[]> with vector<char>.

BUG=None
TEST=`FEATURES=test emerge-$BOARD platform2`

Change-Id: I78d7766b49151f40f42ef00b8204fd2569b45991
Reviewed-on: https://chromium-review.googlesource.com/214780
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Ben Chan <benchan@chromium.org>
Commit-Queue: Ben Chan <benchan@chromium.org>
diff --git a/crash_reporter/crash_collector.cc b/crash_reporter/crash_collector.cc
index 966970b..b5a7072 100644
--- a/crash_reporter/crash_collector.cc
+++ b/crash_reporter/crash_collector.cc
@@ -8,6 +8,7 @@
 #include <fcntl.h>  // For file creation modes.
 #define __STDC_FORMAT_MACROS  // PRId64
 #include <inttypes.h>
+#include <linux/limits.h>  // PATH_MAX
 #include <pwd.h>  // For struct passwd.
 #include <sys/types.h>  // for mode_t.
 #include <sys/wait.h>  // For waitpid.
@@ -320,31 +321,31 @@
 
 bool CrashCollector::GetSymlinkTarget(const FilePath &symlink,
                                       FilePath *target) {
-  int max_size = 32;
-  scoped_ptr<char[]> buffer;
+  ssize_t max_size = 64;
+  std::vector<char> buffer;
+
   while (true) {
-    buffer.reset(new char[max_size + 1]);
-    ssize_t size = readlink(symlink.value().c_str(), buffer.get(), max_size);
+    buffer.resize(max_size + 1);
+    ssize_t size = readlink(symlink.value().c_str(), buffer.data(), max_size);
     if (size < 0) {
       int saved_errno = errno;
       LOG(ERROR) << "Readlink failed on " << symlink.value() << " with "
                  << saved_errno;
       return false;
     }
+
     buffer[size] = 0;
     if (size == max_size) {
-      // Avoid overflow when doubling.
-      if (max_size * 2 > max_size) {
-        max_size *= 2;
-        continue;
-      } else {
+      max_size *= 2;
+      if (max_size > PATH_MAX) {
         return false;
       }
+      continue;
     }
     break;
   }
 
-  *target = FilePath(buffer.get());
+  *target = FilePath(buffer.data());
   return true;
 }