@@ -4174,22 +4174,36 @@ case class ArrayExcept(left: Expression, right: Expression) extends ArraySetLike
41744174 | $javaTypeName $value = $array1. $getter;
41754175 | $hsJavaTypeName $hsValue = $genHsValue;
41764176 |if (! $hs.contains( $hsValue)) {
4177+ | if (++ $size > ${ByteArrayMethods .MAX_ROUNDED_ARRAY_LENGTH }) {
4178+ | break;
4179+ | }
41774180 | $hs.add $postFix( $hsValue);
4178- | $builder. $$ plus $$ eq( $value);
4179- | $size++;
4181+ | $builder. $$ plus $$ eq( $value);
41804182 |}
41814183 """ .stripMargin
41824184
4183- val nonNullArrayDataBuild = if (postFix != " " ) {
4185+ val nonNullArrayDataBuild = {
4186+ val build = if (postFix != " " ) {
4187+ val defaultSize = elementType.defaultSize
4188+ s """
4189+ |if (!UnsafeArrayData.shouldUseGenericArrayData( $defaultSize, $size)) {
4190+ | ${ev.value} = UnsafeArrayData.fromPrimitiveArray( $builder.result());
4191+ |} else {
4192+ | ${ev.value} = new $genericArrayData( $builder.result());
4193+ |}
4194+ """ .stripMargin
4195+ } else {
4196+ s " ${ev.value} = new $genericArrayData( $builder.result()); "
4197+ }
41844198 s """
4185- |if (!UnsafeArrayData.shouldUseGenericArrayData( ${elementType.defaultSize}, $size)) {
4186- | ${ev.value} = UnsafeArrayData.fromPrimitiveArray( $builder.result());
4187- |} else {
4188- | ${ev.value} = new $genericArrayData( $builder.result());
4199+ |if ( $size > ${ByteArrayMethods .MAX_ROUNDED_ARRAY_LENGTH }) {
4200+ | throw new RuntimeException("Unsuccessful try create array with " + $size +
4201+ | " bytes of data due to exceeding the limit " +
4202+ | " ${ByteArrayMethods .MAX_ROUNDED_ARRAY_LENGTH } elements for GenericArrayData." +
4203+ | " $prettyName failed.");
41894204 |}
4205+ | $build
41904206 """ .stripMargin
4191- } else {
4192- s " ${ev.value} = new $genericArrayData( $builder.result()); "
41934207 }
41944208
41954209 def buildResultArrayData (nonNullArrayDataBuild : String ) =
0 commit comments