Added null parameter checks in codeconv.c where appropriate.
[claws.git] / src / codeconv.c
index de939ed800ea46d90e8ff905cf5d00f88a62e27a..b200f352d508ca296bb6c1a4212aaa280173ac7f 100644 (file)
@@ -158,6 +158,8 @@ static gint conv_jistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
        gchar *out = outbuf;
        JISState state = JIS_ASCII;
 
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        /*
         * Loop outputs up to 3 bytes in each pass (aux kanji) and we
         * need 1 byte to terminate the output
@@ -262,6 +264,8 @@ static gint conv_jis_hantozen(guchar *outbuf, guchar jis_code, guchar sound_sym)
 
        guint16 out_code;
 
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        jis_code &= 0x7f;
        sound_sym &= 0x7f;
 
@@ -298,6 +302,8 @@ static gint conv_euctojis(gchar *outbuf, gint outlen, const gchar *inbuf)
        gchar *out = outbuf;
        JISState state = JIS_ASCII;
 
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        /*
         * Loop outputs up to 6 bytes in each pass (aux shift + aux
         * kanji) and we need up to 4 bytes to terminate the output
@@ -391,6 +397,8 @@ static gint conv_sjistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
        const guchar *in = inbuf;
        gchar *out = outbuf;
 
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        /*
         * Loop outputs up to 2 bytes in each pass and we need 1 byte
         * to terminate the output
@@ -441,6 +449,9 @@ static gint conv_jistoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gchar *eucstr;
 
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        Xalloca(eucstr, outlen, return -1);
 
        if (conv_jistoeuc(eucstr, outlen, inbuf) <0)
@@ -454,6 +465,9 @@ static gint conv_sjistoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gchar *tmpstr;
 
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        tmpstr = conv_iconv_strdup(inbuf, CS_SHIFT_JIS, CS_UTF_8);
        if (tmpstr) {
                strncpy2(outbuf, tmpstr, outlen);
@@ -471,6 +485,9 @@ static gint conv_euctoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
        static gboolean iconv_ok = TRUE;
        gchar *tmpstr;
 
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        if (cd == (iconv_t)-1) {
                if (!iconv_ok) {
                        strncpy2(outbuf, inbuf, outlen);
@@ -503,6 +520,10 @@ static gint conv_euctoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
 static gint conv_anytoutf8(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gint r = -1;
+
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        switch (conv_guess_ja_encoding(inbuf)) {
        case C_ISO_2022_JP:
                r = conv_jistoutf8(outbuf, outlen, inbuf);
@@ -528,6 +549,9 @@ static gint conv_utf8toeuc(gchar *outbuf, gint outlen, const gchar *inbuf)
        static gboolean iconv_ok = TRUE;
        gchar *tmpstr;
 
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        if (cd == (iconv_t)-1) {
                if (!iconv_ok) {
                        strncpy2(outbuf, inbuf, outlen);
@@ -561,6 +585,9 @@ static gint conv_utf8tojis(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gchar *eucstr;
 
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        Xalloca(eucstr, outlen, return -1);
 
        if (conv_utf8toeuc(eucstr, outlen, inbuf) < 0)
@@ -628,21 +655,33 @@ static CharSet conv_guess_ja_encoding(const gchar *str)
 
 static gint conv_jistodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        return conv_jistoutf8(outbuf, outlen, inbuf);
 }
 
 static gint conv_sjistodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        return conv_sjistoutf8(outbuf, outlen, inbuf);
 }
 
 static gint conv_euctodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        return conv_euctoutf8(outbuf, outlen, inbuf);
 }
 
 void conv_utf8todisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_if_fail(inbuf != NULL);
+       cm_return_if_fail(outbuf != NULL);
+
        if (g_utf8_validate(inbuf, -1, NULL) == TRUE)
                strncpy2(outbuf, inbuf, outlen);
        else
@@ -652,6 +691,10 @@ void conv_utf8todisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 static gint conv_anytodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gint r = 0;
+
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        if (conv_anytoutf8(outbuf, outlen, inbuf) < 0)
                r = -1;
        if (g_utf8_validate(outbuf, -1, NULL) != TRUE)
@@ -661,6 +704,9 @@ static gint conv_anytodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 
 static gint conv_ustodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        strncpy2(outbuf, inbuf, outlen);
        conv_unreadable_8bit(outbuf);
        
@@ -671,6 +717,9 @@ void conv_localetodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
        gchar *tmpstr;
 
+       cm_return_if_fail(inbuf != NULL);
+       cm_return_if_fail(outbuf != NULL);
+
        codeconv_set_strict(TRUE);
        tmpstr = conv_iconv_strdup(inbuf, conv_get_locale_charset_str(),
                                   CS_INTERNAL);
@@ -699,6 +748,9 @@ void conv_localetodisp(gchar *outbuf, gint outlen, const gchar *inbuf)
 
 static gint conv_noconv(gchar *outbuf, gint outlen, const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, 0);
+       cm_return_val_if_fail(outbuf != NULL, 0);
+
        strncpy2(outbuf, inbuf, outlen);
        return 0;
 }
@@ -752,6 +804,9 @@ void conv_code_converter_destroy(CodeConverter *conv)
 gint conv_convert(CodeConverter *conv, gchar *outbuf, gint outlen,
                  const gchar *inbuf)
 {
+       cm_return_val_if_fail(inbuf != NULL, -1);
+       cm_return_val_if_fail(outbuf != NULL, -1);
+
        if (conv->code_conv_func != conv_noconv)
                return conv->code_conv_func(outbuf, outlen, inbuf);
        else {
@@ -776,6 +831,8 @@ gchar *conv_codeset_strdup(const gchar *inbuf,
        size_t len;
        CodeConvFunc conv_func;
 
+       cm_return_val_if_fail(inbuf != NULL, NULL);
+
        if (!strcmp2(src_code, dest_code)) {
                CharSet dest_charset = conv_get_charset_from_str(dest_code);
                if (strict_mode && dest_charset == C_UTF_8) {
@@ -899,6 +956,8 @@ static gchar *conv_iconv_strdup(const gchar *inbuf,
        iconv_t cd;
        gchar *outbuf;
 
+       cm_return_val_if_fail(inbuf != NULL, NULL);
+
        if (!src_code && !dest_code && 
            g_utf8_validate(inbuf, -1, NULL))
                return g_strdup(inbuf);
@@ -943,6 +1002,8 @@ gchar *conv_iconv_strdup_with_cd(const gchar *inbuf, iconv_t cd)
        size_t n_conv;
        size_t len;
 
+       cm_return_val_if_fail(inbuf != NULL, NULL);
+
        inbuf_p = inbuf;
        in_size = strlen(inbuf);
        in_left = in_size;
@@ -1546,6 +1607,8 @@ gchar *conv_unmime_header(const gchar *str, const gchar *default_encoding,
 {
        gchar buf[BUFFSIZE];
 
+       cm_return_val_if_fail(str != NULL, NULL);
+
        if (is_ascii_str(str))
                return unmime_header(str, addr_field);
 
@@ -1802,6 +1865,8 @@ gchar *conv_filename_from_utf8(const gchar *utf8_file)
        gchar *fs_file;
        GError *error = NULL;
 
+       cm_return_val_if_fail(utf8_file != NULL, NULL);
+
        fs_file = g_filename_from_utf8(utf8_file, -1, NULL, NULL, &error);
        if (error) {
                debug_print("failed to convert encoding of file name: %s\n",
@@ -1819,6 +1884,8 @@ gchar *conv_filename_to_utf8(const gchar *fs_file)
        gchar *utf8_file = NULL;
        GError *error = NULL;
 
+       cm_return_val_if_fail(utf8_file != NULL, NULL);
+
        utf8_file = g_filename_to_utf8(fs_file, -1, NULL, NULL, &error);
        if (error) {
                g_warning("failed to convert encoding of file name: %s",