BaseTools/VfrCompile: Add checks for array access

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Dandan Bi <dandan.bi@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Hao Wu 2016-10-11 11:21:31 +08:00
parent 5acc8d3cdd
commit bab5ad2fd1
2 changed files with 11 additions and 0 deletions

View File

@ -30,6 +30,8 @@
* 1989-2000 * 1989-2000
*/ */
#include <assert.h>
#define ZZINC {if ( track_columns ) (++_endcol);} #define ZZINC {if ( track_columns ) (++_endcol);}
#define ZZGETC {ch = input->nextChar(); cl = ZZSHIFT(ch);} #define ZZGETC {ch = input->nextChar(); cl = ZZSHIFT(ch);}
@ -114,6 +116,7 @@ more:
state = dfa_base[automaton]; state = dfa_base[automaton];
while (ZZNEWSTATE != DfaStates) { while (ZZNEWSTATE != DfaStates) {
state = newstate; state = newstate;
assert(state <= sizeof(dfa)/sizeof(dfa[0]));
ZZCOPY; ZZCOPY;
ZZGETC; ZZGETC;
ZZINC; ZZINC;

View File

@ -1474,6 +1474,10 @@ CVfrDataStorage::GetFreeVarStoreId (
} }
} }
if (Index == EFI_FREE_VARSTORE_ID_BITMAP_SIZE) {
return EFI_VARSTORE_ID_INVALID;
}
for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) { for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {
if ((mFreeVarStoreIdBitMap[Index] & Mask) == 0) { if ((mFreeVarStoreIdBitMap[Index] & Mask) == 0) {
mFreeVarStoreIdBitMap[Index] |= Mask; mFreeVarStoreIdBitMap[Index] |= Mask;
@ -2437,6 +2441,10 @@ CVfrQuestionDB::GetFreeQuestionId (
} }
} }
if (Index == EFI_FREE_QUESTION_ID_BITMAP_SIZE) {
return EFI_QUESTION_ID_INVALID;
}
for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) { for (Offset = 0, Mask = 0x80000000; Mask != 0; Mask >>= 1, Offset++) {
if ((mFreeQIdBitMap[Index] & Mask) == 0) { if ((mFreeQIdBitMap[Index] & Mask) == 0) {
mFreeQIdBitMap[Index] |= Mask; mFreeQIdBitMap[Index] |= Mask;