dgd-contributor commented on a change in pull request #33459:
URL: https://github.com/apache/spark/pull/33459#discussion_r678192485



##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/NumberConverter.scala
##########
@@ -112,19 +127,19 @@ object NumberConverter {
     var (negative, first) = if (n(0) == '-') (true, 1) else (false, 0)
 
     // Copy the digits in the right side of the array
-    val temp = new Array[Byte](64)
+    val temp = new Array[Byte](Math.max(n.length, 64))
     var v: Long = -1
-    if ((n.length == 65 && negative) || n.length <= 64) {

Review comment:
        if n.length > 65, there are 2 cases can happen
   
   case 1: 
   input string have format like: `valid Input String + invalid Character + 
something` and the valid input string can converted without overflow. it will 
ignore the suffix starts from the invalid character
   example: `conv( ("a" * 4 + "?" * 60), 16, 10)` will have result as 43690 (as 
in new test case)
   
   case 2:
   input string is a valid input string => it will over flow and return max 
unsigned long value converted to toBase
   example: `conv( 
"aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0aaaaaaa0", 16, 
10)` will result 18446744073709551615 (this is from test case from SPARK-33428)
   
   




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to