anchor.diff:    UINT16  Value;
     CHAR8   c;
   
  +  UINT16 PreviousValue;
  +  CHAR8 *OrigString = Str;
  +  CHAR8 ErrorMsg[100];
  +
     Str = TrimHex (Str, &IsHex);
     for (Value = 0; (c = *Str) != '\0'; Str++) {
  -    //
  -    // BUG: does not handle overflow here
  -    //
  +    PreviousValue = Value;
       (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
   
       if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
  
positive.code:   UINT32  Value;
    CHAR8   c;
  
    Str = TrimHex (Str, &IsHex);
    for (Value = 0; (c = *Str) != '\0'; Str++) {
      //
      // BUG: does not handle overflow here
      //
      (IsHex == TRUE) ? (Value <<= 4) : (Value *= 10);
  
      if ((IsHex == TRUE) && (c >= 'a') && (c <= 'f')) {
  
negative.code:     if (c >= '0' && c <= '9') {
        Value += (c - '0');
      }
      if((IsHex && ((Value/16) != PreviousValue)) || (!IsHex && ((Value/10) != PreviousValue))) {
        sprintf(ErrorMsg, "Overflow: Value %s is too large to store in a UINT8", OrigString);
        _PCATCH (VFR_RETURN_INVALID_PARAMETER, 0, ErrorMsg);
      }
    }
  
    return Value;
  