Index: /icu/trunk/source/i18n/csrucode.cpp =================================================================== --- a/orig.icu/source/i18n/csrucode.cpp (revision 34075) +++ b/icu/source/i18n/csrucode.cpp (revision 34076) @@ -1,5 +1,5 @@ /* ********************************************************************** - * Copyright (C) 2005-2012, International Business Machines + * Copyright (C) 2005-2013, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** @@ -34,6 +34,7 @@ const uint8_t *input = textIn->fRawInput; int32_t confidence = 0; + int32_t length = textIn->fRawLength; - if (input[0] == 0xFE && input[1] == 0xFF) { + if (length >=2 && input[0] == 0xFE && input[1] == 0xFF) { confidence = 100; } @@ -58,6 +59,7 @@ const uint8_t *input = textIn->fRawInput; int32_t confidence = 0; + int32_t length = textIn->fRawLength; - if (input[0] == 0xFF && input[1] == 0xFE && (input[2] != 0x00 || input[3] != 0x00)) { + if (length >= 4 && input[0] == 0xFF && input[1] == 0xFE && (input[2] != 0x00 || input[3] != 0x00)) { confidence = 100; } @@ -82,5 +84,5 @@ int32_t confidence = 0; - if (getChar(input, 0) == 0x0000FEFFUL) { + if (limit > 0 && getChar(input, 0) == 0x0000FEFFUL) { hasBOM = TRUE; }