ART: Fix clang-analyzer-security.insecureAPI.strcpy

Bug: 32619234
Test: m test-art-host
Change-Id: I08ef95679230be1cfd23037c15714e2720be358f
diff --git a/dt_fd_forward/Android.bp b/dt_fd_forward/Android.bp
index 1ba2323..2a2aa18 100644
--- a/dt_fd_forward/Android.bp
+++ b/dt_fd_forward/Android.bp
@@ -41,6 +41,7 @@
     header_libs: [
         "javavm_headers",
         "dt_fd_forward_export",
+        "art_libartbase_headers",  // For strlcpy emulation.
     ],
     multilib: {
         lib32: {
diff --git a/dt_fd_forward/dt_fd_forward.cc b/dt_fd_forward/dt_fd_forward.cc
index a99f785..d5b6de5 100644
--- a/dt_fd_forward/dt_fd_forward.cc
+++ b/dt_fd_forward/dt_fd_forward.cc
@@ -50,6 +50,8 @@
 #include <jni.h>
 #include <jdwpTransport.h>
 
+#include <base/strlcpy.h>
+
 namespace dt_fd_forward {
 
 // Helper that puts line-number in error message.
@@ -651,7 +653,7 @@
 jdwpTransportError FdForwardTransport::GetLastError(/*out*/char** err) {
   std::string data = global_last_error_;
   *err = reinterpret_cast<char*>(Alloc(data.size() + 1));
-  strcpy(*err, data.c_str());
+  strlcpy(*err, data.c_str(), data.size() + 1);
   return OK;
 }
 
diff --git a/openjdkjvmti/ti_logging.cc b/openjdkjvmti/ti_logging.cc
index 1d24d3b..60f4340 100644
--- a/openjdkjvmti/ti_logging.cc
+++ b/openjdkjvmti/ti_logging.cc
@@ -34,6 +34,7 @@
 #include "art_jvmti.h"
 
 #include "base/mutex.h"
+#include "base/strlcpy.h"
 #include "thread-current-inl.h"
 
 namespace openjdkjvmti {
@@ -47,13 +48,13 @@
   if (tienv->last_error_.empty()) {
     return ERR(ABSENT_INFORMATION);
   }
+  const size_t size = tienv->last_error_.size() + 1;
   char* out;
-  jvmtiError err = tienv->Allocate(tienv->last_error_.size() + 1,
-                                   reinterpret_cast<unsigned char**>(&out));
+  jvmtiError err = tienv->Allocate(size, reinterpret_cast<unsigned char**>(&out));
   if (err != OK) {
     return err;
   }
-  strcpy(out, tienv->last_error_.c_str());
+  strlcpy(out, tienv->last_error_.c_str(), size);
   *data = out;
   return OK;
 }