Bug 801330 - Assert if charLenTable is too small. r=smontagu

This commit is contained in:
Mats Palmgren 2012-10-14 19:10:04 +02:00
parent 2f959ef5b7
commit 1a014d5dce
3 changed files with 24 additions and 12 deletions

View File

@ -6,6 +6,7 @@
#define nsCodingStateMachine_h__
#include "nsPkgInt.h"
#include "mozilla/Util.h"
typedef enum {
eStart = 0,
@ -22,6 +23,9 @@ typedef struct
uint32_t classFactor;
nsPkgInt stateTable;
const uint32_t* charLenTable;
#ifdef DEBUG
const size_t charLenTableLength;
#endif
const char* name;
} SMModel;
@ -34,6 +38,7 @@ public:
if (mCurrentState == eStart)
{
mCurrentBytePos = 0;
MOZ_ASSERT(byteCls < mModel->charLenTableLength);
mCurrentCharLen = mModel->charLenTable[byteCls];
}
//from byte's class and stateTable, we get its next state
@ -68,5 +73,12 @@ extern const SMModel ISO2022CNSMModel;
extern const SMModel ISO2022JPSMModel;
extern const SMModel ISO2022KRSMModel;
#undef CHAR_LEN_TABLE
#ifdef DEBUG
#define CHAR_LEN_TABLE(x) x, mozilla::ArrayLength(x)
#else
#define CHAR_LEN_TABLE(x) x
#endif
#endif /* nsCodingStateMachine_h__ */

View File

@ -55,7 +55,7 @@ const SMModel HZSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, HZ_cls },
6,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, HZ_st },
HZCharLenTable,
CHAR_LEN_TABLE(HZCharLenTable),
"HZ-GB-2312",
};
@ -113,7 +113,7 @@ const SMModel ISO2022CNSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022CN_cls },
9,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022CN_st },
ISO2022CNCharLenTable,
CHAR_LEN_TABLE(ISO2022CNCharLenTable),
"ISO-2022-CN",
};
@ -171,7 +171,7 @@ const SMModel ISO2022JPSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022JP_cls },
10,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022JP_st },
ISO2022JPCharLenTable,
CHAR_LEN_TABLE(ISO2022JPCharLenTable),
"ISO-2022-JP",
};
@ -225,7 +225,7 @@ const SMModel ISO2022KRSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022KR_cls },
6,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, ISO2022KR_st },
ISO2022KRCharLenTable,
CHAR_LEN_TABLE(ISO2022KRCharLenTable),
"ISO-2022-KR",
};

View File

@ -61,7 +61,7 @@ SMModel const Big5SMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, BIG5_cls },
5,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, BIG5_st },
Big5CharLenTable,
CHAR_LEN_TABLE(Big5CharLenTable),
"Big5",
};
@ -116,7 +116,7 @@ const SMModel EUCJPSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCJP_cls },
6,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCJP_st },
EUCJPCharLenTable,
CHAR_LEN_TABLE(EUCJPCharLenTable),
"EUC-JP",
};
@ -168,7 +168,7 @@ const SMModel EUCKRSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCKR_cls },
4,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCKR_st },
EUCKRCharLenTable,
CHAR_LEN_TABLE(EUCKRCharLenTable),
"EUC-KR",
};
@ -224,7 +224,7 @@ const SMModel EUCTWSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCTW_cls },
7,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, EUCTW_st },
EUCTWCharLenTable,
CHAR_LEN_TABLE(EUCTWCharLenTable),
"x-euc-tw",
};
@ -277,7 +277,7 @@ SMModel GB2312SMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB2312_cls },
4,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB2312_st },
GB2312CharLenTable,
CHAR_LEN_TABLE(GB2312CharLenTable),
"GB2312",
};
*/
@ -340,7 +340,7 @@ const SMModel GB18030SMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB18030_cls },
7,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, GB18030_st },
GB18030CharLenTable,
CHAR_LEN_TABLE(GB18030CharLenTable),
"GB18030",
};
@ -397,7 +397,7 @@ const SMModel SJISSMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, SJIS_cls },
6,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, SJIS_st },
SJISCharLenTable,
CHAR_LEN_TABLE(SJISCharLenTable),
"Shift_JIS",
};
@ -475,7 +475,7 @@ const SMModel UTF8SMModel = {
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, UTF8_cls },
16,
{eIdxSft4bits, eSftMsk4bits, eBitSft4bits, eUnitMsk4bits, UTF8_st },
UTF8CharLenTable,
CHAR_LEN_TABLE(UTF8CharLenTable),
"UTF-8",
};