]> git-server-git.apps.pok.os.sepia.ceph.com Git - rocksdb.git/commitdiff
Fix up backupable_db stack corruption.
authorDmitri Smirnov <dmitrism@microsoft.com>
Tue, 10 Apr 2018 02:21:46 +0000 (19:21 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 10 Apr 2018 02:27:24 +0000 (19:27 -0700)
Summary:
Fix up OACR(Lint) warnings.
Closes https://github.com/facebook/rocksdb/pull/3674

Differential Revision: D7563869

Pulled By: ajkr

fbshipit-source-id: 8c1e5045c8a6a2d85b2933fdbc60fde93bf0c9de

third-party/gtest-1.7.0/fused-src/gtest/gtest.h
util/status.cc
utilities/backupable/backupable_db.cc

index e3f0cfb95cb35597a5ee940405c36888ea07cb34..3cec41a9e4474c28a1ea62b215d23dae8f4aef6e 100644 (file)
@@ -3410,10 +3410,6 @@ inline bool IsDir(const StatStruct& st) { return S_ISDIR(st.st_mode); }
 
 GTEST_DISABLE_MSC_WARNINGS_PUSH_(4996 /* deprecated function */)
 
-inline const char* StrNCpy(char* dest, const char* src, size_t n) {
-  return strncpy(dest, src, n);
-}
-
 // ChDir(), FReopen(), FDOpen(), Read(), Write(), Close(), and
 // StrError() aren't needed on Windows CE at this time and thus not
 // defined there.
index e0c1af99ec81c77c85cff6d1af30fde5858f4274..1881c58de0b94b5d29d7568289552fa37262c315 100644 (file)
 namespace rocksdb {
 
 const char* Status::CopyState(const char* state) {
+  const size_t cch = 
+      std::strlen(state) + 1; // +1 for the null terminator
   char* const result =
-      new char[std::strlen(state) + 1];  // +1 for the null terminator
-  std::strcpy(result, state);
+      new char[cch]; 
+#ifdef OS_WIN
+  errno_t ret;
+  ret = strncpy_s(result, cch, state, cch - 1);
+  assert(ret == 0);
+#else
+  std::strncpy(result, state, cch - 1);
+#endif
   return result;
 }
 
index d0602c1cb09cf175d3610346bb5b3ab4d42d6f8b..98e8a4781e5272589c926921f9171b8f90281e7e 100644 (file)
@@ -1770,7 +1770,8 @@ Status BackupEngineImpl::BackupMeta::StoreToFile(bool sync) {
   }
 
   char writelen_temp[19];
-  if (len + sprintf(writelen_temp, "%" ROCKSDB_PRIszt "\n", files_.size()) >= buf_size) {
+  if (len + snprintf(writelen_temp, sizeof(writelen_temp),
+                     "%" ROCKSDB_PRIszt "\n", files_.size()) >= buf_size) {
     backup_meta_file->Append(Slice(buf.get(), len));
     buf.reset();
     unique_ptr<char[]> new_reset_buf(new char[max_backup_meta_file_size_]);
@@ -1785,7 +1786,8 @@ Status BackupEngineImpl::BackupMeta::StoreToFile(bool sync) {
   for (const auto& file : files_) {
     // use crc32 for now, switch to something else if needed
 
-    size_t newlen = len + file->filename.length() + sprintf(writelen_temp, " crc32 %u\n", file->checksum_value);
+    size_t newlen = len + file->filename.length() + snprintf(writelen_temp,
+      sizeof(writelen_temp), " crc32 %u\n", file->checksum_value);
     const char *const_write = writelen_temp;
     if (newlen >= buf_size) {
       backup_meta_file->Append(Slice(buf.get(), len));