Skip to content

Commit

Permalink
ICU-22716 Test more number format
Browse files Browse the repository at this point in the history
  • Loading branch information
FrankYFTang committed Sep 11, 2024
1 parent 266a2b8 commit 3a74fcf
Showing 1 changed file with 55 additions and 5 deletions.
60 changes: 55 additions & 5 deletions icu4c/source/test/fuzzer/number_format_fuzzer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@
#include <string>
#include <memory>
#include "fuzzer_utils.h"
#include "unicode/choicfmt.h"
#include "unicode/compactdecimalformat.h"
#include "unicode/decimfmt.h"
#include "unicode/numfmt.h"
#include "unicode/rbnf.h"

IcuEnvironment* env = new IcuEnvironment();

Expand All @@ -31,15 +35,61 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {

const icu::Locale& locale = GetRandomLocale(rnd);

icu::UnicodeString fuzzstr(false, fuzzbuff.get(), unistr_size);
icu::Formattable result;
std::unique_ptr<icu::NumberFormat> fmt(
icu::NumberFormat::createInstance(locale, status));
if (U_FAILURE(status)) {
return 0;
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}

icu::UnicodeString fuzzstr(false, fuzzbuff.get(), unistr_size);
icu::Formattable result;
fmt->parse(fuzzstr, result, status);
status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createCurrencyInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createPercentInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
fmt.reset(icu::NumberFormat::createScientificInstance(locale, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
icu::ChoiceFormat cfmt(fuzzstr, status);
if (U_SUCCESS(status)) {
cfmt.parse(fuzzstr, result, status);
}

UParseError perror;
status = U_ZERO_ERROR;
icu::RuleBasedNumberFormat rbfmt(fuzzstr, locale, perror, status);
if (U_SUCCESS(status)) {
rbfmt.parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
icu::DecimalFormat dfmt(fuzzstr, status);
if (U_SUCCESS(status)) {
dfmt.parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
fmt.reset(icu::CompactDecimalFormat::createInstance(locale, UNUM_SHORT, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}

status = U_ZERO_ERROR;
fmt.reset(icu::CompactDecimalFormat::createInstance(locale, UNUM_LONG, status));
if (U_SUCCESS(status)) {
fmt->parse(fuzzstr, result, status);
}
return 0;
}

0 comments on commit 3a74fcf

Please sign in to comment.