/* First handle forward cases.  */
       if (func_rva >= export_rva && func_rva < export_rva + export_size)
        {
-         char *forward_name = (char *) (erva + func_rva);
-         char *funcname = (char *) (erva + name_rva);
-         char *forward_dll_name = forward_name;
-         char *forward_func_name = forward_name;
-         char *sep = strrchr (forward_name, '.');
-
-         if (sep)
+         const char *forward_name = (const char *) (erva + func_rva);
+         const char *funcname = (const char *) (erva + name_rva);
+         const char *forward_dll_name = forward_name;
+         const char *forward_func_name = forward_name;
+         const char *sep = strrchr (forward_name, '.');
+
+         std::string name_storage;
+         if (sep != nullptr)
            {
              int len = (int) (sep - forward_name);
 
-             forward_dll_name = (char *) alloca (len + 1);
-             strncpy (forward_dll_name, forward_name, len);
-             forward_dll_name[len] = '\0';
-             forward_func_name = ++sep;
+             name_storage = std::string (forward_name, len);
+             forward_dll_name = name_storage.c_str ();
+             forward_func_name = sep + 1;
            }
          if (add_pe_forwarded_sym (reader, funcname, forward_dll_name,
                                    forward_func_name, ordinal,
          if ((func_rva >= section_data[sectix].rva_start)
              && (func_rva < section_data[sectix].rva_end))
            {
-             char *sym_name = (char *) (erva + name_rva);
+             const char *sym_name = (const char *) (erva + name_rva);
 
              section_found = 1;
              add_pe_exported_sym (reader, sym_name, func_rva, ordinal,
        }
       if (!section_found)
        {
-         char *funcname = (char *) (erva + name_rva);
+         const char *funcname = (const char *) (erva + name_rva);
 
          if (name_rva == 0)
            {