yhirose 5 månader sedan
förälder
incheckning
7e2a173072
2 ändrade filer med 12 tillägg och 1 borttagningar
  1. 6 1
      httplib.h
  2. 6 0
      test/test.cc

+ 6 - 1
httplib.h

@@ -4889,10 +4889,15 @@ inline bool canonicalize_path(const char *path, std::string &resolved) {
   char buf[_MAX_PATH];
   char buf[_MAX_PATH];
   if (_fullpath(buf, path, _MAX_PATH) == nullptr) { return false; }
   if (_fullpath(buf, path, _MAX_PATH) == nullptr) { return false; }
   resolved = buf;
   resolved = buf;
-#else
+#elif defined(PATH_MAX)
   char buf[PATH_MAX];
   char buf[PATH_MAX];
   if (realpath(path, buf) == nullptr) { return false; }
   if (realpath(path, buf) == nullptr) { return false; }
   resolved = buf;
   resolved = buf;
+#else
+  auto buf = realpath(path, nullptr);
+  auto guard = scope_exit([&]() { std::free(buf); });
+  if (buf == nullptr) { return false; }
+  resolved = buf;
 #endif
 #endif
   return true;
   return true;
 }
 }

+ 6 - 0
test/test.cc

@@ -17540,8 +17540,14 @@ TEST(SymlinkTest, SymlinkEscapeFromBaseDirectory) {
   }
   }
 
 
   // Create symlink using absolute path so it resolves correctly
   // Create symlink using absolute path so it resolves correctly
+#ifdef PATH_MAX
   char abs_secret[PATH_MAX];
   char abs_secret[PATH_MAX];
   ASSERT_NE(nullptr, realpath(secret_dir.c_str(), abs_secret));
   ASSERT_NE(nullptr, realpath(secret_dir.c_str(), abs_secret));
+#else
+  auto abs_secret = realpath(secret_dir.c_str(), nullptr);
+  auto abs_secret_guard = detail::scope_exit([&]() { std::free(abs_secret); });
+  ASSERT_NE(nullptr, abs_secret);
+#endif
   ASSERT_EQ(0, symlink(abs_secret, symlink_path.c_str()));
   ASSERT_EQ(0, symlink(abs_secret, symlink_path.c_str()));
 
 
   auto se = detail::scope_exit([&] {
   auto se = detail::scope_exit([&] {