audk/MdePkg
Laszlo Ersek 41bfaffd13 MdePkg/BaseSafeIntLib: fix undefined behavior in SafeInt64Add()
The addition in the assignment

  SignedResult = Augend + Addend;

is performed with unchecked INT64 operands. According to ISO C, if the
mathematical result of signed integer addition cannot be represented in
the result type, the behavior is undefined. (Refer to ISO C99 6.5p5.
6.2.5p9 only exempts unsigned integers, and 6.3.1.3p3 does not apply
because it treats the conversion of integers that have been successfully
evaluated first.)

Replace the after-the-fact result checking with checks on the operands,
and only perform the addition if it is safe.

Cc: Bret Barkelew <Bret.Barkelew@microsoft.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Sean Brogan <sean.brogan@microsoft.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Tested-by: Michael D Kinney <michael.d.kinney@intel.com>
2018-02-21 11:57:33 +01:00
..
Include MdePkg/UefiLib: Add EfiLocateProtocolBuffer() 2018-02-11 15:10:03 -08:00
Library MdePkg/BaseSafeIntLib: fix undefined behavior in SafeInt64Add() 2018-02-21 11:57:33 +01:00
MdePkg.dec
MdePkg.dsc
MdePkg.uni
MdePkgExtra.uni