matchlength = search.size[count];
usearch_next(strsrch, &status);
if (matchindex != usearch_getMatchedStart(strsrch) ||
- matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
+ matchlength != usearch_getMatchedLength(strsrch)) {
char *str = toCharString(usearch_getText(strsrch, &textlength));
log_err("Text: %s\n", str);
str = toCharString(usearch_getPattern(strsrch, &textlength));
count ++;
if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
- (int32_t) matchlength || U_FAILURE(status) ||
+ matchlength || U_FAILURE(status) ||
memcmp(matchtext,
usearch_getText(strsrch, &textlength) + matchindex,
matchlength * sizeof(UChar)) != 0) {
matchlength = search.size[count];
usearch_previous(strsrch, &status);
if (matchindex != usearch_getMatchedStart(strsrch) ||
- matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
+ matchlength != usearch_getMatchedLength(strsrch)) {
char *str = toCharString(usearch_getText(strsrch, &textlength));
log_err("Text: %s\n", str);
str = toCharString(usearch_getPattern(strsrch, &textlength));
}
if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
- (int32_t) matchlength || U_FAILURE(status) ||
+ matchlength || U_FAILURE(status) ||
memcmp(matchtext,
usearch_getText(strsrch, &textlength) + matchindex,
matchlength * sizeof(UChar)) != 0) {
ucol_setStrength(usearch_getCollator(strsrch), search.strength);
usearch_reset(strsrch);
while (U_SUCCESS(status) && matchindex >= 0) {
- uint32_t matchlength = search.size[count];
+ int32_t matchlength = search.size[count];
usearch_next(strsrch, &status);
if (matchindex != usearch_getMatchedStart(strsrch) ||
- matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
+ matchlength != usearch_getMatchedLength(strsrch)) {
char *str = toCharString(usearch_getText(strsrch,
&textlength));
log_err("Text: %s\n", str);
usearch_setOffset(strsrch, matchindex + matchlength, &status);
usearch_previous(strsrch, &status);
if (matchindex != usearch_getMatchedStart(strsrch) ||
- matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
+ matchlength != usearch_getMatchedLength(strsrch)) {
char *str = toCharString(usearch_getText(strsrch,
&textlength));
log_err("Text: %s\n", str);
}
status = U_ZERO_ERROR;
if (usearch_getMatchedText(strsrch, NULL, 0, &status) !=
- (int32_t)matchlength || U_SUCCESS(status)){
+ matchlength || U_SUCCESS(status)){
log_err("Error pre-flighting match length\n");
}
status = U_ZERO_ERROR;
if (usearch_getMatchedText(strsrch, matchtext, 0, &status) !=
- (int32_t)matchlength || U_SUCCESS(status)){
+ matchlength || U_SUCCESS(status)){
log_err("Error getting match text with buffer size 0\n");
}
status = U_ZERO_ERROR;
if (usearch_getMatchedText(strsrch, matchtext, matchlength, &status)
- != (int32_t)matchlength || matchtext[matchlength - 1] == 0 ||
+ != matchlength || matchtext[matchlength - 1] == 0 ||
U_FAILURE(status)){
log_err("Error getting match text with exact size\n");
}
status = U_ZERO_ERROR;
if (usearch_getMatchedText(strsrch, matchtext, 128, &status) !=
- (int32_t) matchlength || U_FAILURE(status) ||
+ matchlength || U_FAILURE(status) ||
memcmp(matchtext,
usearch_getText(strsrch, &textlength) + matchindex,
matchlength * sizeof(UChar)) != 0 ||
usearch_setText(strsrch, text, -1, &status);
usearch_setPattern(strsrch, pattern, -1, &status);
while (U_SUCCESS(status) && matchindex >= 0) {
- uint32_t matchlength = search.size[count];
+ int32_t matchlength = search.size[count];
usearch_next(strsrch, &status);
if (matchindex != usearch_getMatchedStart(strsrch) ||
- matchlength != (uint32_t)usearch_getMatchedLength(strsrch)) {
+ matchlength != usearch_getMatchedLength(strsrch)) {
char *str = toCharString(usearch_getText(strsrch,
&textlength));
log_err("Text: %s\n", str);
}
}
-#define TEST_ASSERT(x) \
- {if (U_FAILURE(x)) {log_err_status(x, "%s:%d: FAIL: test assertion failure \n", __FILE__, __LINE__);\
- }}
+#define TEST_ASSERT(x) UPRV_BLOCK_MACRO_BEGIN { \
+ if (U_FAILURE(x)) { \
+ log_err_status(x, "%s:%d: FAIL: test assertion failure \n", __FILE__, __LINE__); \
+ } \
+} UPRV_BLOCK_MACRO_END
static void TestSearchForNull(void) {
UCollator *coll;
return;
}
+static void TestUInt16Overflow(void) {
+ const int32_t uint16_overflow = UINT16_MAX + 1;
+ UChar* pattern = (UChar*)uprv_malloc(uint16_overflow * sizeof(UChar));
+ if (pattern == NULL)
+ {
+ log_err("Err: uprv_malloc returned NULL\n");
+ return;
+ }
+ u_memset(pattern, 'A', uint16_overflow);
+ UChar text[] = { 'B' };
+
+ UErrorCode errorCode = U_ZERO_ERROR;
+ UStringSearch* usearch = usearch_open(pattern, uint16_overflow, text, 1, "en-US", NULL, &errorCode);
+
+ if (U_SUCCESS(errorCode))
+ {
+ int32_t match = usearch_first(usearch, &errorCode);
+
+ if (U_SUCCESS(errorCode))
+ {
+ if (match != USEARCH_DONE)
+ {
+ log_err("Err: match was not expected, got %d\n", match);
+ }
+ }
+ else
+ {
+ log_err("usearch_first error %s\n", u_errorName(errorCode));
+ }
+ usearch_close(usearch);
+ }
+ else
+ {
+ log_err("usearch_open error %s\n", u_errorName(errorCode));
+ }
+ uprv_free(pattern);
+}
static void TestPCEBuffer_100df(void) {
UChar search[] =
addTest(root, &TestPCEBuffer_2surr, "tscoll/usrchtst/TestPCEBuffer/2_dfff");
addTest(root, &TestMatchFollowedByIgnorables, "tscoll/usrchtst/TestMatchFollowedByIgnorables");
addTest(root, &TestIndicPrefixMatch, "tscoll/usrchtst/TestIndicPrefixMatch");
+ addTest(root, &TestUInt16Overflow, "tscoll/usrchtst/TestUInt16Overflow");
}
#endif /* #if !UCONFIG_NO_COLLATION */