Add exceptions for utext, uscript and unormalization. 30/224930/2 submit/tizen/20200219.024540
authorHyunjee Kim <hj0426.kim@samsung.com>
Wed, 12 Feb 2020 09:58:06 +0000 (18:58 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Mon, 17 Feb 2020 02:31:38 +0000 (11:31 +0900)
Change-Id: I790b6510089e9358a8b56fd8594a6e3f7d192598
Signed-off-by: Hyunjee Kim <hj0426.kim@samsung.com>
src/utils_i18n_unormalization.c
src/utils_i18n_uscript.c
src/utils_i18n_utext.c

index 16df764..cf73822 100644 (file)
@@ -175,15 +175,11 @@ int i18n_unormalization_get_raw_decomposition(i18n_unormalizer_h normalizer, i18
 
 int i18n_unormalization_compose_pair(i18n_unormalizer_h normalizer, i18n_uchar32 a, i18n_uchar32 b, i18n_uchar32 *c)
 {
-       i18n_error_code_e i18n_error;
-       UErrorCode icu_error = U_ZERO_ERROR;
+       retv_if(normalizer == NULL, I18N_ERROR_INVALID_PARAMETER);
 
        *c = unorm2_composePair((UNormalizer2 *) normalizer, a, b);
 
-       ERR_MAPPING(icu_error, i18n_error);
-       I18N_ERR(i18n_error);
-
-       return i18n_error;
+       return I18N_ERROR_NONE;
 }
 
 uint8_t i18n_unormalization_get_combining_class(i18n_unormalizer_h normalizer, i18n_uchar32 code_point)
@@ -229,37 +225,29 @@ int i18n_unormalization_span_quick_check_yes(i18n_unormalizer_h normalizer, cons
 
 int i18n_unormalizer_has_boundary_before(i18n_unormalizer_h normalizer, i18n_uchar32 c, i18n_ubool *result)
 {
-       i18n_error_code_e i18n_error;
-       UErrorCode icu_error = U_ZERO_ERROR;
+       retv_if(normalizer == NULL, I18N_ERROR_INVALID_PARAMETER);
 
        *result = unorm2_hasBoundaryBefore((UNormalizer2 *) normalizer, c);
-       ERR_MAPPING(icu_error, i18n_error);
-       I18N_ERR(i18n_error);
 
-       return i18n_error;
+       return I18N_ERROR_NONE;
 }
 
 int i18n_unormalizer_has_boundary_after(i18n_unormalizer_h normalizer, i18n_uchar32 c, i18n_ubool *result)
 {
-       i18n_error_code_e i18n_error;
-       UErrorCode icu_error = U_ZERO_ERROR;
+       retv_if(normalizer == NULL, I18N_ERROR_INVALID_PARAMETER);
 
        *result = unorm2_hasBoundaryAfter((UNormalizer2 *) normalizer, c);
-       ERR_MAPPING(icu_error, i18n_error);
-       I18N_ERR(i18n_error);
 
-       return i18n_error;
+       return I18N_ERROR_NONE;
+
 }
 
 int i18n_unormalization_is_inert(i18n_unormalizer_h normalizer, i18n_uchar32 c, i18n_ubool *result)
 {
-       i18n_error_code_e i18n_error;
-       UErrorCode icu_error = U_ZERO_ERROR;
+       retv_if(normalizer == NULL, I18N_ERROR_INVALID_PARAMETER);
 
        *result = unorm2_isInert((UNormalizer2 *) normalizer, c);
-       ERR_MAPPING(icu_error, i18n_error);
-       I18N_ERR(i18n_error);
 
-       return i18n_error;
+       return I18N_ERROR_NONE;
 }
 
index e89a637..feb3532 100644 (file)
@@ -33,11 +33,23 @@ int i18n_uscript_get_codes(const char* language, i18n_uscript_code_e* codes, int
 
 const char *i18n_uscript_get_name(i18n_uscript_code_e script_code)
 {
+       if(script_code >= I18N_USCRIPT_CODE_LIMIT || script_code <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return NULL;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_getName(script_code);
 }
 
 const char *i18n_uscript_get_short_name(i18n_uscript_code_e script_code)
 {
+       if(script_code >= I18N_USCRIPT_CODE_LIMIT || script_code <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return NULL;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_getShortName(script_code);
 }
 
@@ -55,6 +67,13 @@ int i18n_uscript_get_script(i18n_uchar32 codepoint, i18n_uscript_code_e *script_
 
 i18n_ubool i18n_uscript_has_script(i18n_uchar32 codepoint, i18n_uscript_code_e script_code)
 {
+       if(script_code >= I18N_USCRIPT_CODE_LIMIT || script_code <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return false;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return uscript_hasScript(codepoint, script_code);
 }
 
@@ -86,21 +105,45 @@ int i18n_uscript_get_sample_string(i18n_uscript_code_e script, i18n_uchar *sampl
 
 i18n_uscript_usage_e i18n_uscript_get_usage(i18n_uscript_code_e script)
 {
+       if(script >= I18N_USCRIPT_CODE_LIMIT || script <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return I18N_USCRIPT_USAGE_NOT_ENCODED;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_getUsage(script);
 }
 
 i18n_ubool i18n_uscript_is_right_to_left(i18n_uscript_code_e script)
 {
+       if(script >= I18N_USCRIPT_CODE_LIMIT || script <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return false;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_isRightToLeft(script);
 }
 
 i18n_ubool i18n_uscript_breaks_between_letters(i18n_uscript_code_e script)
 {
+       if(script >= I18N_USCRIPT_CODE_LIMIT || script <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return false;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_breaksBetweenLetters(script);
 }
 
 i18n_ubool i18n_uscript_is_cased(i18n_uscript_code_e script)
 {
+       if(script >= I18N_USCRIPT_CODE_LIMIT || script <= I18N_USCRIPT_INVALID_CODE) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return false;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return uscript_isCased(script);
 }
 
index b69f22f..85169da 100644 (file)
@@ -51,6 +51,7 @@ int i18n_utext_create_for_uchars(i18n_utext_h uta, const i18n_uchar *s, int64_t
 
 int i18n_utext_clone(i18n_utext_h dest, const i18n_utext_h src, i18n_ubool deep, i18n_ubool read_only, i18n_utext_h *ut)
 {
+       retv_if(src == NULL, I18N_ERROR_INVALID_PARAMETER);
        i18n_error_code_e i18n_error;
        UErrorCode icu_error = U_ZERO_ERROR;
 
@@ -69,61 +70,135 @@ i18n_ubool i18n_utext_equals(const i18n_utext_h a, const i18n_utext_h b)
 
 int64_t i18n_utext_native_length(i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_nativeLength((UText *)ut);
 }
 
 i18n_ubool i18n_utext_is_length_expensive(const i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_isLengthExpensive((UText *)ut);
 }
 
 i18n_uchar32 i18n_utext_char32_at(i18n_utext_h ut, int64_t native_index)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_char32At((UText *)ut, native_index);
 }
 
 i18n_uchar32 i18n_utext_current32(i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_current32((UText *)ut);
 }
 
 i18n_uchar32 i18n_utext_next32(i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_next32((UText *)ut);
 }
 
 i18n_uchar32 i18n_utext_previous32(i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_previous32((UText *)ut);
 }
 
 i18n_uchar32 i18n_utext_next32_from(i18n_utext_h ut, int64_t native_index)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_next32From((UText *)ut, native_index);
 }
 
 i18n_uchar32 i18n_utext_previous32_from(i18n_utext_h ut, int64_t native_index)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
        return utext_previous32From((UText *)ut, native_index);
 }
 
 int64_t i18n_utext_get_native_index(const i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_getNativeIndex((UText *)ut);
 }
 
 void i18n_utext_set_native_index(i18n_utext_h ut, int64_t native_index)
 {
+       if(ut == NULL || native_index == NULL)
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_setNativeIndex((UText *)ut, native_index);
 }
 
 i18n_ubool i18n_utext_move_index32(i18n_utext_h ut, int32_t delta)
 {
+       if(ut == NULL || delta == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_moveIndex32((UText *)ut, delta);
 }
 
 int64_t i18n_utext_get_previous_native_index(i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_getPreviousNativeIndex((UText *)ut);
 }
 
@@ -141,11 +216,25 @@ int i18n_utext_extract(i18n_utext_h ut, int64_t native_start, int64_t native_lim
 
 i18n_ubool i18n_utext_is_writable(const i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_isWritable((UText *)ut);
 }
 
 i18n_ubool i18n_utext_has_meta_data(const i18n_utext_h ut)
 {
+       if(ut == NULL) {
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+               return 0;
+       }
+
+       set_last_result(I18N_ERROR_NONE);
+
        return utext_hasMetaData((UText *)ut);
 }
 
@@ -175,5 +264,10 @@ int i18n_utext_copy(i18n_utext_h ut, int64_t native_start, int64_t native_limit,
 
 void i18n_utext_freeze(i18n_utext_h ut)
 {
+       if(ut == NULL)
+               set_last_result(I18N_ERROR_INVALID_PARAMETER);
+
+       set_last_result(I18N_ERROR_NONE);
+
        utext_freeze((UText *)ut);
 }