diff --git a/lib/zip_utf-8.c b/lib/zip_utf-8.c index 305fb500f..f665d88a4 100644 --- a/lib/zip_utf-8.c +++ b/lib/zip_utf-8.c @@ -109,43 +109,43 @@ _zip_guess_encoding(zip_string_t *str, zip_encoding_type_t expected_encoding) { name = str->raw; if (str->encoding != ZIP_ENCODING_UNKNOWN) { - enc = str->encoding; + return str->encoding; } - else { - enc = ZIP_ENCODING_ASCII; - for (i = 0; i < str->length; i++) { - if ((name[i] > 31 && name[i] < 128) || name[i] == '\r' || name[i] == '\n' || name[i] == '\t') { + enc = ZIP_ENCODING_ASCII; + for (i = 0; i < str->length; i++) { + if (name[i] < 128) { + if (name[i] > 31 || name[i] == '\r' || name[i] == '\n' || name[i] == '\t') { continue; } + } - enc = ZIP_ENCODING_UTF8_GUESSED; - if ((name[i] & UTF_8_LEN_2_MASK) == UTF_8_LEN_2_MATCH) { - ulen = 1; - } - else if ((name[i] & UTF_8_LEN_3_MASK) == UTF_8_LEN_3_MATCH) { - ulen = 2; - } - else if ((name[i] & UTF_8_LEN_4_MASK) == UTF_8_LEN_4_MATCH) { - ulen = 3; - } - else { - enc = ZIP_ENCODING_CP437; - break; - } + enc = ZIP_ENCODING_UTF8_GUESSED; + if ((name[i] & UTF_8_LEN_2_MASK) == UTF_8_LEN_2_MATCH) { + ulen = 1; + } + else if ((name[i] & UTF_8_LEN_3_MASK) == UTF_8_LEN_3_MATCH) { + ulen = 2; + } + else if ((name[i] & UTF_8_LEN_4_MASK) == UTF_8_LEN_4_MATCH) { + ulen = 3; + } + else { + enc = ZIP_ENCODING_CP437; + break; + } - if (i + ulen >= str->length) { - enc = ZIP_ENCODING_CP437; - break; - } + if (i + ulen >= str->length) { + enc = ZIP_ENCODING_CP437; + break; + } - for (j = 1; j <= ulen; j++) { - if ((name[i + j] & UTF_8_CONTINUE_MASK) != UTF_8_CONTINUE_MATCH) { - enc = ZIP_ENCODING_CP437; - goto done; - } + for (j = 1; j <= ulen; j++) { + if ((name[i + j] & UTF_8_CONTINUE_MASK) != UTF_8_CONTINUE_MATCH) { + enc = ZIP_ENCODING_CP437; + goto done; } - i += ulen; } + i += ulen; } done: