< prev index next >

src/hotspot/share/utilities/stringUtils.cpp

Print this page

        

*** 21,30 **** --- 21,31 ---- * questions. * */ #include "precompiled.hpp" + #include "utilities/debug.hpp" #include "utilities/stringUtils.hpp" int StringUtils::replace_no_expand(char* string, const char* from, const char* to) { int replace_count = 0; size_t from_len = strlen(from);
*** 41,53 **** return replace_count; } double StringUtils::similarity(const char* str1, size_t len1, const char* str2, size_t len2) { ! size_t total = len1 + len2; size_t hit = 0; for (size_t i = 0; i < len1 - 1; i++) { for (size_t j = 0; j < len2 - 1; j++) { if ((str1[i] == str2[j]) && (str1[i+1] == str2[j+1])) { ++hit; break; --- 42,61 ---- return replace_count; } double StringUtils::similarity(const char* str1, size_t len1, const char* str2, size_t len2) { ! assert(str1 != NULL && str2 != NULL, "sanity"); + size_t total = len1 + len2; size_t hit = 0; + + // filter out zero-length strings else we will underflow on len-1 below + if (len1 == 0 || len2 == 0) { + return 0.0; + } + for (size_t i = 0; i < len1 - 1; i++) { for (size_t j = 0; j < len2 - 1; j++) { if ((str1[i] == str2[j]) && (str1[i+1] == str2[j+1])) { ++hit; break;
< prev index next >