From e38bc864d171e5fbbb77602a3793e1ecb996c34a Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 3 Jun 2015 14:57:02 +0300 Subject: [PATCH] Fix heavy integer parsing in FunctionN class factory #KT-7924 Fixed --- .../BuiltInFictitiousFunctionClassFactory.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt index c8b1f1247b2..bab202cffce 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/functions/BuiltInFictitiousFunctionClassFactory.kt @@ -43,12 +43,7 @@ public class BuiltInFictitiousFunctionClassFactory( val prefix = kind.classNamePrefix if (!className.startsWith(prefix)) continue - val arity = try { - className.substring(prefix.length()).toInt() - } - catch (e: NumberFormatException) { - continue - } + val arity = toInt(className.substring(prefix.length())) ?: continue // TODO: validate arity, should be <= 255 for functions, <= 254 for members/extensions return KindWithArity(kind, arity) @@ -56,6 +51,18 @@ public class BuiltInFictitiousFunctionClassFactory( return null } + + private fun toInt(s: String): Int? { + if (s.isEmpty()) return null + + var result = 0 + for (c in s) { + val d = c - '0' + if (d !in 0..9) return null + result = result * 10 + d + } + return result + } } override fun createClass(classId: ClassId): ClassDescriptor? {