From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.126; helo=mga18.intel.com; envelope-from=liming.gao@intel.com; receiver=edk2-devel@lists.01.org Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 0FA5C211ADA58 for ; Mon, 7 Jan 2019 06:30:26 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga106.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 07 Jan 2019 06:30:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,451,1539673200"; d="scan'208";a="114784961" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by fmsmga008.fm.intel.com with ESMTP; 07 Jan 2019 06:30:06 -0800 Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 7 Jan 2019 06:30:06 -0800 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by fmsmsx109.amr.corp.intel.com (10.18.116.9) with Microsoft SMTP Server (TLS) id 14.3.408.0; Mon, 7 Jan 2019 06:30:05 -0800 Received: from shsmsx152.ccr.corp.intel.com ([169.254.6.44]) by shsmsx102.ccr.corp.intel.com ([169.254.2.63]) with mapi id 14.03.0415.000; Mon, 7 Jan 2019 22:30:04 +0800 From: "Gao, Liming" To: "Bi, Dandan" , "edk2-devel@lists.01.org" Thread-Topic: [edk2] [patch] BaseTools/VfrCompile: report error for Integer overflow Thread-Index: AQHUnor+c7i+Ft4jQEGqA2c2lZQ6gqWj7dcg Date: Mon, 7 Jan 2019 14:30:03 +0000 Message-ID: <4A89E2EF3DFEDB4C8BFDE51014F606A14E3AD33E@SHSMSX152.ccr.corp.intel.com> References: <20181228085429.47056-1-dandan.bi@intel.com> In-Reply-To: <20181228085429.47056-1-dandan.bi@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ctpclassification: CTP_NT x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiYjJmM2FmNjItZmNjZC00OWUyLWFiYjItZGQ1MGE2OGYwMTg2IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoiXC82U2MwejZQS0NrWVN6blwvckFRRVJoV0ZidjQ5emdaaGZnTlY4V3A3VzI1Sk5HZ3dsNTQrbHk0V1ByS2hiSG1kIn0= dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [patch] BaseTools/VfrCompile: report error for Integer overflow X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Jan 2019 14:30:27 -0000 X-List-Received-Date: Mon, 07 Jan 2019 14:30:27 -0000 X-List-Received-Date: Mon, 07 Jan 2019 14:30:27 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Liming Gao > -----Original Message----- > From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Da= ndan Bi > Sent: Friday, December 28, 2018 4:54 PM > To: edk2-devel@lists.01.org > Cc: Gao, Liming > Subject: [edk2] [patch] BaseTools/VfrCompile: report error for Integer ov= erflow >=20 > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3D1415 >=20 > When an integer constant specified in the .vfr file is > too large for the varstore field it is being used with, > the VFR compiler reports an overflow warning like this: > Test.vfr(693): WARNING: Overflow: Value 1024 is too large to > store in a UINT8 > : String to UINT* Overflow > Since Warning does not break the build process, > and it is easy to miss it. > This patch is to update the code to report error and break > the build if meet this kind of issue. >=20 > Cc: Bob Feng > Cc: Liming Gao > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Dandan Bi > --- > BaseTools/Source/C/VfrCompile/VfrError.cpp | 2 +- > BaseTools/Source/C/VfrCompile/VfrError.h | 2 +- > BaseTools/Source/C/VfrCompile/VfrSyntax.g | 10 +++++----- > 3 files changed, 7 insertions(+), 7 deletions(-) >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrError.cpp b/BaseTools/Sourc= e/C/VfrCompile/VfrError.cpp > index bbf738c217..c105d73bea 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.cpp > +++ b/BaseTools/Source/C/VfrCompile/VfrError.cpp > @@ -45,16 +45,16 @@ static SVFR_ERROR_HANDLE VFR_ERROR_HANDLE_TABLE [] = =3D { > { VFR_RETURN_DATA_STRING_ERROR, ": data field string error or not supp= ort"}, > { VFR_RETURN_DEFAULT_VALUE_REDEFINED, ": default value re-defined with= different value"}, > { VFR_RETURN_CONSTANT_ONLY, ": only constant is allowed in the express= ion"}, > { VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR, ": Varstore name is define= d by more than one varstores, it can't be referred > as varstore, only varstore strucure name could be used."}, > { VFR_RETURN_BIT_WIDTH_ERROR, ": bit width must be <=3D sizeof (type) = * 8 and the max width can not > 32" }, > + { VFR_RETURN_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"}, > { VFR_RETURN_CODEUNDEFINED, ": undefined Error Code" } > }; >=20 > static SVFR_WARNING_HANDLE VFR_WARNING_HANDLE_TABLE [] =3D { > { VFR_WARNING_DEFAULT_VALUE_REDEFINED, ": default value re-defined wit= h different value"}, > - { VFR_WARNING_STRING_TO_UINT_OVERFLOW, ": String to UINT* Overflow"}, > { VFR_WARNING_ACTION_WITH_TEXT_TWO, ": Action opcode should not have T= extTwo part"}, > { VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, ": Not recommend to use obso= leted framework opcode"}, > { VFR_WARNING_CODEUNDEFINED, ": undefined Warning Code" } > }; >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrError.h b/BaseTools/Source/= C/VfrCompile/VfrError.h > index e83ae900fa..e795f1631d 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrError.h > +++ b/BaseTools/Source/C/VfrCompile/VfrError.h > @@ -43,16 +43,16 @@ typedef enum { > VFR_RETURN_DATA_STRING_ERROR, > VFR_RETURN_DEFAULT_VALUE_REDEFINED, > VFR_RETURN_CONSTANT_ONLY, > VFR_RETURN_VARSTORE_NAME_REDEFINED_ERROR, > VFR_RETURN_BIT_WIDTH_ERROR, > + VFR_RETURN_STRING_TO_UINT_OVERFLOW, > VFR_RETURN_CODEUNDEFINED > } EFI_VFR_RETURN_CODE; >=20 > typedef enum { > VFR_WARNING_DEFAULT_VALUE_REDEFINED =3D 0, > - VFR_WARNING_STRING_TO_UINT_OVERFLOW, > VFR_WARNING_ACTION_WITH_TEXT_TWO, > VFR_WARNING_OBSOLETED_FRAMEWORK_OPCODE, > VFR_WARNING_CODEUNDEFINED > } EFI_VFR_WARNING_CODE; >=20 > diff --git a/BaseTools/Source/C/VfrCompile/VfrSyntax.g b/BaseTools/Source= /C/VfrCompile/VfrSyntax.g > index 84dd2c3ed3..7d8088a889 100644 > --- a/BaseTools/Source/C/VfrCompile/VfrSyntax.g > +++ b/BaseTools/Source/C/VfrCompile/VfrSyntax.g > @@ -1,9 +1,9 @@ > /*++ @file > Vfr Syntax >=20 > -Copyright (c) 2004 - 2017, Intel Corporation. All rights reserved.
> +Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.
> This program and the accompanying materials > are licensed and made available under the terms and conditions of the BS= D License > which accompanies this distribution. The full text of the license may b= e found at > http://opensource.org/licenses/bsd-license.php >=20 > @@ -5320,11 +5320,11 @@ EfiVfrParser::_STOU8 ( > if (c >=3D '0' && c <=3D '9') { > Value +=3D (c - '0'); > } > if((IsHex && ((Value/16) !=3D PreviousValue)) || (!IsHex && ((Value/= 10) !=3D PreviousValue))) { > sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a U= INT8", OrigString); > - gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLO= W, LineNum, ErrorMsg); > + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (VF= R_RETURN_STRING_TO_UINT_OVERFLOW, LineNum, > ErrorMsg); > } > } >=20 > return Value; > } > @@ -5357,11 +5357,11 @@ EfiVfrParser::_STOU16 ( > if (c >=3D '0' && c <=3D '9') { > Value +=3D (c - '0'); > } > if((IsHex && ((Value/16) !=3D PreviousValue)) || (!IsHex && ((Value/= 10) !=3D PreviousValue))) { > sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a U= INT16", OrigString); > - gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLO= W, LineNum, ErrorMsg); > + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (VF= R_RETURN_STRING_TO_UINT_OVERFLOW, LineNum, > ErrorMsg); > } > } >=20 > return Value; > } > @@ -5394,11 +5394,11 @@ EfiVfrParser::_STOU32 ( > if (c >=3D '0' && c <=3D '9') { > Value +=3D (c - '0'); > } > if((IsHex && ((Value/16) !=3D PreviousValue)) || (!IsHex && ((Value/= 10) !=3D PreviousValue ))) { > sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a U= INT32", OrigString); > - gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLO= W, LineNum, ErrorMsg); > + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (VF= R_RETURN_STRING_TO_UINT_OVERFLOW, LineNum, > ErrorMsg); > } > } >=20 > return Value; > } > @@ -5430,11 +5430,11 @@ EfiVfrParser::_STOU64 ( > if (c >=3D '0' && c <=3D '9') { > Value +=3D (c - '0'); > } > if((IsHex && ((Value/16) !=3D PreviousValue)) || ((!IsHex && (Value/= 10) !=3D PreviousValue))) { > sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a U= INT64", OrigString); > - gCVfrErrorHandle.HandleWarning (VFR_WARNING_STRING_TO_UINT_OVERFLO= W, LineNum, ErrorMsg); > + mParserStatus =3D mParserStatus + gCVfrErrorHandle.HandleError (VF= R_RETURN_STRING_TO_UINT_OVERFLOW, LineNum, > ErrorMsg); > } > } >=20 > return Value; > } > -- > 2.18.0.windows.1 >=20 > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel