Fix potential UAF in ConcatInPlace.
[pdfium.git] / core / src / fxcrt / fx_basic_coords.cpp
index f55c267..8e7bb3e 100644 (file)
@@ -4,6 +4,7 @@
  
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
+#include <limits.h>
 #include "../../include/fxcrt/fx_ext.h"
 void FX_RECT::Normalize()
 {
@@ -53,15 +54,14 @@ FX_BOOL GetIntersection(FX_FLOAT low1, FX_FLOAT high1, FX_FLOAT low2, FX_FLOAT h
 }
 extern "C" int FXSYS_round(FX_FLOAT d)
 {
-    int iRet = 0;
-    if (d >= 0.0f) {
-        iRet = (int)(d + 0.5f);
-        if (iRet >= 0) {
-            return iRet;
-        }
-        return -iRet;
+    if (d < (FX_FLOAT)INT_MIN) {
+        return INT_MIN;
+    }
+    if (d > (FX_FLOAT)INT_MAX) {
+        return INT_MAX;
     }
-    return (int)(d - 0.5f);
+
+    return (int)round(d);
 }
 CFX_FloatRect::CFX_FloatRect(const FX_RECT& rect)
 {
@@ -260,7 +260,12 @@ void CFX_Matrix::Set(FX_FLOAT a, FX_FLOAT b, FX_FLOAT c, FX_FLOAT d, FX_FLOAT e,
 }
 void CFX_Matrix::Set(const FX_FLOAT n[6])
 {
-    FXSYS_memcpy32((void*)this, &n, sizeof(CFX_Matrix));
+    this->a = n[0];
+    this->b = n[1];
+    this->c = n[2];
+    this->d = n[3];
+    this->e = n[4];
+    this->f = n[5];
 }
 void CFX_Matrix::SetReverse(const CFX_Matrix &m)
 {