diff --git a/sql/item.h b/sql/item.h index 1d580280196..5bcdc45ce23 100644 --- a/sql/item.h +++ b/sql/item.h @@ -4027,7 +4027,7 @@ public: Base class to implement typed value caching Item classes Item_copy_ classes are very similar to the corresponding Item_ - classes (e.g. Item_copy_int is similar to Item_int) but they add + classes (e.g. Item_copy_string is similar to Item_string) but they add the following additional functionality to Item_ : 1. Nullability 2. Possibility to store the value not only on instantiation time, diff --git a/sql/sql_type_int.h b/sql/sql_type_int.h index 055790ba431..1eda5651df5 100644 --- a/sql/sql_type_int.h +++ b/sql/sql_type_int.h @@ -33,7 +33,11 @@ public: bool neg() const { return m_value < 0 && !m_unsigned; } ulonglong abs() const { - return neg() ? (ulonglong) -m_value : (ulonglong) m_value; + if (m_unsigned) + return (ulonglong) m_value; + if (m_value == LONGLONG_MIN) // avoid undefined behavior + return ((ulonglong) LONGLONG_MAX) + 1; + return m_value < 0 ? -m_value : m_value; } };