From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) (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 1E2E68029B for ; Sun, 5 Mar 2017 17:14:20 -0800 (PST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Mar 2017 17:14:19 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.35,251,1484035200"; d="scan'208";a="940931835" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by orsmga003.jf.intel.com with ESMTP; 05 Mar 2017 17:14:18 -0800 Received: from FMSMSX109.amr.corp.intel.com (10.18.116.9) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.248.2; Sun, 5 Mar 2017 17:14:19 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by fmsmsx109.amr.corp.intel.com (10.18.116.9) with Microsoft SMTP Server (TLS) id 14.3.248.2; Sun, 5 Mar 2017 17:14:18 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.20]) by SHSMSX104.ccr.corp.intel.com ([10.239.4.70]) with mapi id 14.03.0248.002; Mon, 6 Mar 2017 09:14:16 +0800 From: "Wu, Jiaxin" To: "Wu, Hao A" , "edk2-devel@lists.01.org" CC: "Fu, Siyuan" Thread-Topic: [PATCH v3 4/6] NetworkPkg: Refine type cast for pointer subtraction Thread-Index: AQHSjxxpSxQfERtB4EytJICiPce8raGHD5Vg Date: Mon, 6 Mar 2017 01:14:15 +0000 Message-ID: <895558F6EA4E3B41AC93A00D163B7274162A00F8@SHSMSX103.ccr.corp.intel.com> References: <1487995514-7628-1-git-send-email-hao.a.wu@intel.com> <1487995514-7628-5-git-send-email-hao.a.wu@intel.com> In-Reply-To: <1487995514-7628-5-git-send-email-hao.a.wu@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMTRiOWIzODEtZjAxNi00MGE3LWI1NzctYTk1N2IxYjRkYjA3IiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX1BVQkxJQyJ9XX1dfSwiU3ViamVjdExhYmVscyI6W10sIlRNQ1ZlcnNpb24iOiIxNS45LjYuNiIsIlRydXN0ZWRMYWJlbEhhc2giOiI0VmE4RE9NUUpaUlpuejQ5TGxrXC84bmhkN1FGZ1hrTDZNR1ZhWk5Zdk00TT0ifQ== x-ctpclassification: CTP_PUBLIC x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v3 4/6] NetworkPkg: Refine type cast for pointer subtraction X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Mar 2017 01:14:20 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Wu Jiaxin > -----Original Message----- > From: Wu, Hao A > Sent: Saturday, February 25, 2017 12:05 PM > To: edk2-devel@lists.01.org > Cc: Wu, Hao A ; Fu, Siyuan ; > Wu, Jiaxin > Subject: [PATCH v3 4/6] NetworkPkg: Refine type cast for pointer subtract= ion >=20 > For pointer subtraction, the result is of type "ptrdiff_t". According to > the C11 standard (Committee Draft - April 12, 2011): >=20 > "When two pointers are subtracted, both shall point to elements of the > same array object, or one past the last element of the array object; the > result is the difference of the subscripts of the two array elements. The > size of the result is implementation-defined, and its type (a signed > integer type) is ptrdiff_t defined in the header. If the resul= t > is not representable in an object of that type, the behavior is > undefined." >=20 > In our codes, there are cases that the pointer subtraction is not > performed by pointers to elements of the same array object. This might > lead to potential issues, since the behavior is undefined according to C1= 1 > standard. >=20 > Also, since the size of type "ptrdiff_t" is implementation-defined. Some > static code checkers may warn that the pointer subtraction might underflo= w > first and then being cast to a bigger size. For example: >=20 > UINT8 *Ptr1, *Ptr2; > UINTN PtrDiff; > ... > PtrDiff =3D (UINTN) (Ptr1 - Ptr2); >=20 > The commit will refine the pointer subtraction expressions by casting eac= h > pointer to UINTN first and then perform the subtraction: >=20 > PtrDiff =3D (UINTN) Ptr1 - (UINTN) Ptr2; >=20 > Cc: Siyuan Fu > Cc: Jiaxin Wu > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Hao Wu > Acked-by: Laszlo Ersek > --- > NetworkPkg/HttpDxe/HttpImpl.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) >=20 > diff --git a/NetworkPkg/HttpDxe/HttpImpl.c > b/NetworkPkg/HttpDxe/HttpImpl.c > index 745832b..1f7a4fa 100644 > --- a/NetworkPkg/HttpDxe/HttpImpl.c > +++ b/NetworkPkg/HttpDxe/HttpImpl.c > @@ -1342,7 +1342,7 @@ HttpResponseWorker ( > // We receive part of header of next HTTP msg. > // > if (HttpInstance->NextMsg !=3D NULL) { > - HttpMsg->BodyLength =3D MIN ((UINTN) (HttpInstance->NextMsg - > (CHAR8 *) Fragment.Bulk), HttpMsg->BodyLength); > + HttpMsg->BodyLength =3D MIN ((UINTN) HttpInstance->NextMsg - > (UINTN) Fragment.Bulk, HttpMsg->BodyLength); > CopyMem (HttpMsg->Body, Fragment.Bulk, HttpMsg->BodyLength); >=20 > HttpInstance->CacheLen =3D Fragment.Len - HttpMsg->BodyLength; > @@ -1360,7 +1360,7 @@ HttpResponseWorker ( > CopyMem (HttpInstance->CacheBody, Fragment.Bulk + HttpMsg- > >BodyLength, HttpInstance->CacheLen); > HttpInstance->CacheOffset =3D 0; >=20 > - HttpInstance->NextMsg =3D HttpInstance->CacheBody + (UINTN) > (HttpInstance->NextMsg - (CHAR8 *) (Fragment.Bulk + HttpMsg- > >BodyLength)); > + HttpInstance->NextMsg =3D HttpInstance->CacheBody + ((UINTN) > HttpInstance->NextMsg - (UINTN) (Fragment.Bulk + HttpMsg->BodyLength)); > } > } else { > HttpMsg->BodyLength =3D MIN (Fragment.Len, (UINT32) HttpMsg- > >BodyLength); > -- > 1.9.5.msysgit.0