From f5df53b7a70864c6d31c2ccd779014ccaf85b726 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Tue, 21 Aug 2018 22:45:17 +0300 Subject: [PATCH] Detect UInt/ULong parsing overflow after digit addition instead of before #KT-26161 --- .../unsigned/src/kotlin/UStringNumberConversions.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/stdlib/unsigned/src/kotlin/UStringNumberConversions.kt b/libraries/stdlib/unsigned/src/kotlin/UStringNumberConversions.kt index 49824785a99..249e56fa202 100644 --- a/libraries/stdlib/unsigned/src/kotlin/UStringNumberConversions.kt +++ b/libraries/stdlib/unsigned/src/kotlin/UStringNumberConversions.kt @@ -207,9 +207,9 @@ public fun String.toUIntOrNull(radix: Int): UInt? { result *= uradix - if (result > limit - digit.toUInt()) return null - + val beforeAdding = result result += digit.toUInt() + if (result < beforeAdding) return null // overflow has happened } return result @@ -260,9 +260,9 @@ public fun String.toULongOrNull(radix: Int): ULong? { result *= uradix - if (result > limit - digit.toUInt()) return null - + val beforeAdding = result result += digit.toUInt() + if (result < beforeAdding) return null // overflow has happened } return result