Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(19)

Unified Diff: source/tools/toolutil/filetools.cpp

Issue 2496433004: Cherry pick an upstream patch for tz dir traversal (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/common/putil.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/tools/toolutil/filetools.cpp
diff --git a/source/tools/toolutil/filetools.cpp b/source/tools/toolutil/filetools.cpp
index 238ef7ba155004f835fbe54ce94c402c4358caad..9b61c879285f2cdfef1649943857a47502c7b113 100644
--- a/source/tools/toolutil/filetools.cpp
+++ b/source/tools/toolutil/filetools.cpp
@@ -4,6 +4,7 @@
*******************************************************************************
*/
+#include "unicode/platform.h"
#if U_PLATFORM == U_PF_MINGW
// *cough* - for struct stat
#ifdef __STRICT_ANSI__
@@ -13,6 +14,7 @@
#include "filetools.h"
#include "filestrm.h"
+#include "charstr.h"
#include "cstring.h"
#include "unicode/putil.h"
#include "putilimp.h"
@@ -27,8 +29,6 @@
#include <dirent.h>
typedef struct dirent DIRENT;
-#define MAX_PATH_SIZE 4096 /* Set the limit for the size of the path. */
-
#define SKIP1 "."
#define SKIP2 ".."
#endif
@@ -56,20 +56,24 @@ isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir)
while ((dirEntry = readdir(pDir)) != NULL) {
if (uprv_strcmp(dirEntry->d_name, SKIP1) != 0 && uprv_strcmp(dirEntry->d_name, SKIP2) != 0) {
- char newpath[MAX_PATH_SIZE] = "";
- uprv_strcpy(newpath, checkAgainst);
- uprv_strcat(newpath, U_FILE_SEP_STRING);
- uprv_strcat(newpath, dirEntry->d_name);
-
- if ((subDirp = opendir(newpath)) != NULL) {
+ UErrorCode status = U_ZERO_ERROR;
+ icu::CharString newpath(checkAgainst, -1, status);
+ newpath.append(U_FILE_SEP_STRING, -1, status);
+ newpath.append(dirEntry->d_name, -1, status);
+ if (U_FAILURE(status)) {
+ fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, u_errorName(status));
+ return FALSE;
+ };
+
+ if ((subDirp = opendir(newpath.data())) != NULL) {
/* If this new path is a directory, make a recursive call with the newpath. */
closedir(subDirp);
- isLatest = isFileModTimeLater(filePath, newpath, isDir);
+ isLatest = isFileModTimeLater(filePath, newpath.data(), isDir);
if (!isLatest) {
break;
}
} else {
- int32_t latest = whichFileModTimeIsLater(filePath, newpath);
+ int32_t latest = whichFileModTimeIsLater(filePath, newpath.data());
if (latest < 0 || latest == 2) {
isLatest = FALSE;
break;
« no previous file with comments | « source/common/putil.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698