| Index: xfa/fde/css/fde_cssdatatable.cpp
 | 
| diff --git a/xfa/fde/css/fde_cssdatatable.cpp b/xfa/fde/css/fde_cssdatatable.cpp
 | 
| index 3b090a2699200a84227754ff4b22b006bd3efe54..db4302b9fccf7c527b891c4486b466fe00adf883 100644
 | 
| --- a/xfa/fde/css/fde_cssdatatable.cpp
 | 
| +++ b/xfa/fde/css/fde_cssdatatable.cpp
 | 
| @@ -11,6 +11,14 @@
 | 
|  #include "xfa/fgas/crt/fgas_codepage.h"
 | 
|  #include "xfa/fgas/crt/fgas_system.h"
 | 
|  
 | 
| +namespace {
 | 
| +
 | 
| +uint8_t Hex2Dec(uint8_t hexHigh, uint8_t hexLow) {
 | 
| +  return (FXSYS_toHexDigit(hexHigh) << 4) + FXSYS_toHexDigit(hexLow);
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
|  FX_BOOL FDE_CSSLengthToFloat(const FDE_CSSLENGTH& len,
 | 
|                               FX_FLOAT fPercentBase,
 | 
|                               FX_FLOAT& fResult) {
 | 
| @@ -666,16 +674,17 @@ FDE_LPCCSSCOLORTABLE FDE_GetCSSColorByName(const CFX_WideStringC& wsName) {
 | 
|    } while (iStart <= iEnd);
 | 
|    return NULL;
 | 
|  }
 | 
| +
 | 
|  FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue,
 | 
|                             int32_t iValueLen,
 | 
|                             FX_FLOAT& fValue,
 | 
|                             FDE_CSSPRIMITIVETYPE& eUnit) {
 | 
| -  ASSERT(pszValue != NULL && iValueLen > 0);
 | 
| +  ASSERT(pszValue && iValueLen > 0);
 | 
|    int32_t iUsedLen = 0;
 | 
|    fValue = FX_wcstof(pszValue, iValueLen, &iUsedLen);
 | 
| -  if (iUsedLen <= 0) {
 | 
| +  if (iUsedLen <= 0)
 | 
|      return FALSE;
 | 
| -  }
 | 
| +
 | 
|    iValueLen -= iUsedLen;
 | 
|    pszValue += iUsedLen;
 | 
|    eUnit = FDE_CSSPRIMITIVETYPE_Number;
 | 
| @@ -684,9 +693,8 @@ FX_BOOL FDE_ParseCSSNumber(const FX_WCHAR* pszValue,
 | 
|    } else if (iValueLen == 2) {
 | 
|      FDE_LPCCSSLENGTHUNITTABLE pUnit =
 | 
|          FDE_GetCSSLengthUnitByName(CFX_WideStringC(pszValue, 2));
 | 
| -    if (pUnit != NULL) {
 | 
| +    if (pUnit)
 | 
|        eUnit = (FDE_CSSPRIMITIVETYPE)pUnit->wValue;
 | 
| -    }
 | 
|    }
 | 
|    return TRUE;
 | 
|  }
 | 
| @@ -726,57 +734,60 @@ FX_BOOL FDE_ParseCSSURI(const FX_WCHAR* pszValue,
 | 
|  FX_BOOL FDE_ParseCSSColor(const FX_WCHAR* pszValue,
 | 
|                            int32_t iValueLen,
 | 
|                            FX_ARGB& dwColor) {
 | 
| -  ASSERT(pszValue != NULL && iValueLen > 0);
 | 
| +  ASSERT(pszValue && iValueLen > 0);
 | 
| +
 | 
|    if (*pszValue == '#') {
 | 
|      switch (iValueLen) {
 | 
|        case 4: {
 | 
| -        uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]);
 | 
| -        uint8_t green = FX_Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]);
 | 
| -        uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]);
 | 
| +        uint8_t red = Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[1]);
 | 
| +        uint8_t green = Hex2Dec((uint8_t)pszValue[2], (uint8_t)pszValue[2]);
 | 
| +        uint8_t blue = Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[3]);
 | 
|          dwColor = ArgbEncode(255, red, green, blue);
 | 
| -      }
 | 
|          return TRUE;
 | 
| +      }
 | 
|        case 7: {
 | 
| -        uint8_t red = FX_Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]);
 | 
| -        uint8_t green = FX_Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]);
 | 
| -        uint8_t blue = FX_Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]);
 | 
| +        uint8_t red = Hex2Dec((uint8_t)pszValue[1], (uint8_t)pszValue[2]);
 | 
| +        uint8_t green = Hex2Dec((uint8_t)pszValue[3], (uint8_t)pszValue[4]);
 | 
| +        uint8_t blue = Hex2Dec((uint8_t)pszValue[5], (uint8_t)pszValue[6]);
 | 
|          dwColor = ArgbEncode(255, red, green, blue);
 | 
| -      }
 | 
|          return TRUE;
 | 
| +      }
 | 
| +      default:
 | 
| +        return FALSE;
 | 
|      }
 | 
| -  } else if (iValueLen >= 10) {
 | 
| -    if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4)) {
 | 
| +  }
 | 
| +
 | 
| +  if (iValueLen >= 10) {
 | 
| +    if (pszValue[iValueLen - 1] != ')' || FX_wcsnicmp(L"rgb(", pszValue, 4))
 | 
|        return FALSE;
 | 
| -    }
 | 
| +
 | 
|      uint8_t rgb[3] = {0};
 | 
|      FX_FLOAT fValue;
 | 
|      FDE_CSSPRIMITIVETYPE eType;
 | 
|      CFDE_CSSValueListParser list(pszValue + 4, iValueLen - 5, ',');
 | 
|      for (int32_t i = 0; i < 3; ++i) {
 | 
| -      if (!list.NextValue(eType, pszValue, iValueLen)) {
 | 
| +      if (!list.NextValue(eType, pszValue, iValueLen))
 | 
|          return FALSE;
 | 
| -      }
 | 
| -      if (eType != FDE_CSSPRIMITIVETYPE_Number) {
 | 
| +      if (eType != FDE_CSSPRIMITIVETYPE_Number)
 | 
|          return FALSE;
 | 
| -      }
 | 
| -      if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType)) {
 | 
| +      if (!FDE_ParseCSSNumber(pszValue, iValueLen, fValue, eType))
 | 
|          return FALSE;
 | 
| -      }
 | 
| +
 | 
|        rgb[i] = eType == FDE_CSSPRIMITIVETYPE_Percent
 | 
|                     ? FXSYS_round(fValue * 2.55f)
 | 
|                     : FXSYS_round(fValue);
 | 
|      }
 | 
|      dwColor = ArgbEncode(255, rgb[0], rgb[1], rgb[2]);
 | 
|      return TRUE;
 | 
| -  } else {
 | 
| -    FDE_LPCCSSCOLORTABLE pColor =
 | 
| -        FDE_GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen));
 | 
| -    if (pColor != NULL) {
 | 
| -      dwColor = pColor->dwValue;
 | 
| -      return TRUE;
 | 
| -    }
 | 
|    }
 | 
| -  return FALSE;
 | 
| +
 | 
| +  FDE_LPCCSSCOLORTABLE pColor =
 | 
| +      FDE_GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen));
 | 
| +  if (!pColor)
 | 
| +    return FALSE;
 | 
| +
 | 
| +  dwColor = pColor->dwValue;
 | 
| +  return TRUE;
 | 
|  }
 | 
|  
 | 
|  CFDE_CSSValueList::CFDE_CSSValueList(IFX_MemoryAllocator* pStaticStore,
 | 
| 
 |