public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [patch] BaseTools/VfrCompile: Add check to avoid using NULL pointer
@ 2017-11-01 14:25 Dandan Bi
  2017-11-02  1:13 ` Gao, Liming
  0 siblings, 1 reply; 2+ messages in thread
From: Dandan Bi @ 2017-11-01 14:25 UTC (permalink / raw)
  To: edk2-devel; +Cc: Eric Dong, Liming Gao

Question value are stored in one specified storage, but the Data type
of the storage or the field in the Data type may be NULL sometime,
so we need to add check before using these related pointers.
Here list some NULL cases:
(1)For an efivastore which doesn't specify a data structure or a
   data type(UINT8,UINT16...)as the storage, just has VarName and
   VarSize instead, we can not get its data type before parsing
   its VarSize.

(2)For efivastore which just specifies the data type(UINT8,UINT16...)
   not a structure as the storage,this data type doesn't have sub-fields.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
---
 BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
index b00a926..0fe14b0 100644
--- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
+++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
@@ -613,13 +613,17 @@ CVfrVarDataTypeDB::DataTypeHasBitField (
 {
   SVfrDataType        *pType  = NULL;
   SVfrDataField       *pTmp;
 
   GetDataType (TypeName, &pType);
+
+  if (pType == NULL){
+    return FALSE;
+  }
   for (pTmp = pType->mMembers; pTmp!= NULL; pTmp = pTmp->mNext) {
     if (pTmp->mIsBitField) {
-       return TRUE;
+      return TRUE;
     }
   }
   return FALSE;
 }
 
@@ -646,11 +650,11 @@ CVfrVarDataTypeDB::IsThisBitField (
   while (*VarStr != '\0') {
     CHECK_ERROR_RETURN(ExtractFieldNameAndArrary(VarStr, FName, ArrayIdx), VFR_RETURN_SUCCESS);
     CHECK_ERROR_RETURN(GetTypeField (FName, pType, pField), VFR_RETURN_SUCCESS);
     pType  = pField->mFieldType;
   }
-  if (pField->mIsBitField) {
+  if (pField != NULL && pField->mIsBitField) {
     return TRUE;
   } else {
     return FALSE;
   }
 }
-- 
1.9.5.msysgit.1



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [patch] BaseTools/VfrCompile: Add check to avoid using NULL pointer
  2017-11-01 14:25 [patch] BaseTools/VfrCompile: Add check to avoid using NULL pointer Dandan Bi
@ 2017-11-02  1:13 ` Gao, Liming
  0 siblings, 0 replies; 2+ messages in thread
From: Gao, Liming @ 2017-11-02  1:13 UTC (permalink / raw)
  To: Bi, Dandan, edk2-devel@lists.01.org; +Cc: Dong, Eric

Reviewed-by: Liming Gao <liming.gao@intel.com>

> -----Original Message-----
> From: Bi, Dandan
> Sent: Wednesday, November 1, 2017 10:25 PM
> To: edk2-devel@lists.01.org
> Cc: Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [patch] BaseTools/VfrCompile: Add check to avoid using NULL pointer
> 
> Question value are stored in one specified storage, but the Data type
> of the storage or the field in the Data type may be NULL sometime,
> so we need to add check before using these related pointers.
> Here list some NULL cases:
> (1)For an efivastore which doesn't specify a data structure or a
>    data type(UINT8,UINT16...)as the storage, just has VarName and
>    VarSize instead, we can not get its data type before parsing
>    its VarSize.
> 
> (2)For efivastore which just specifies the data type(UINT8,UINT16...)
>    not a structure as the storage,this data type doesn't have sub-fields.
> 
> Cc: Eric Dong <eric.dong@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Dandan Bi <dandan.bi@intel.com>
> ---
>  BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
> 
> diff --git a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
> index b00a926..0fe14b0 100644
> --- a/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
> +++ b/BaseTools/Source/C/VfrCompile/VfrUtilityLib.cpp
> @@ -613,13 +613,17 @@ CVfrVarDataTypeDB::DataTypeHasBitField (
>  {
>    SVfrDataType        *pType  = NULL;
>    SVfrDataField       *pTmp;
> 
>    GetDataType (TypeName, &pType);
> +
> +  if (pType == NULL){
> +    return FALSE;
> +  }
>    for (pTmp = pType->mMembers; pTmp!= NULL; pTmp = pTmp->mNext) {
>      if (pTmp->mIsBitField) {
> -       return TRUE;
> +      return TRUE;
>      }
>    }
>    return FALSE;
>  }
> 
> @@ -646,11 +650,11 @@ CVfrVarDataTypeDB::IsThisBitField (
>    while (*VarStr != '\0') {
>      CHECK_ERROR_RETURN(ExtractFieldNameAndArrary(VarStr, FName, ArrayIdx), VFR_RETURN_SUCCESS);
>      CHECK_ERROR_RETURN(GetTypeField (FName, pType, pField), VFR_RETURN_SUCCESS);
>      pType  = pField->mFieldType;
>    }
> -  if (pField->mIsBitField) {
> +  if (pField != NULL && pField->mIsBitField) {
>      return TRUE;
>    } else {
>      return FALSE;
>    }
>  }
> --
> 1.9.5.msysgit.1



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-11-02  1:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-01 14:25 [patch] BaseTools/VfrCompile: Add check to avoid using NULL pointer Dandan Bi
2017-11-02  1:13 ` Gao, Liming

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox