@@ -293,79 +293,89 @@ void getJValArray(jvalue *constructorArgs, class_args args, size_t argc, JNIEnv
293293 case TYPE_BOOL: {
294294 jbooleanArray setArr = env->NewBooleanArray ((jsize)array_size);
295295
296- jboolean fill[ array_size] ;
296+ jboolean * fill = (jboolean *) malloc ( array_size * sizeof (jboolean)) ;
297297 for (size_t i = 0 ; i < array_size; i++)
298298 fill[i] = (jboolean)value_to_bool (array_value[i]);
299299
300300 env->SetBooleanArrayRegion (setArr, 0 , array_size, fill);
301301 constructorArgs[i].l = setArr;
302+ free (fill);
302303 break ;
303304 }
304305 case TYPE_CHAR: {
305306 jcharArray setArr = env->NewCharArray ((jsize)array_size);
306307
307- jchar fill[ array_size] ;
308+ jchar * fill = (jchar *) malloc ( array_size * sizeof (jchar)) ;
308309 for (size_t i = 0 ; i < array_size; i++)
309310 fill[i] = (jchar)value_to_char (array_value[i]);
310311
311312 env->SetCharArrayRegion (setArr, 0 , array_size, fill);
312313 constructorArgs[i].l = setArr;
314+ free (fill);
313315 break ;
314316 }
315317 case TYPE_SHORT: {
316318 jshortArray setArr = env->NewShortArray ((jsize)array_size);
317319
318- jshort fill[ array_size] ;
320+ jshort * fill = (jshort *) malloc ( array_size * sizeof (jshort)) ;
319321 for (size_t i = 0 ; i < array_size; i++)
320322 fill[i] = (jshort)value_to_short (array_value[i]);
321323
322324 env->SetShortArrayRegion (setArr, 0 , array_size, fill);
323325 constructorArgs[i].l = setArr;
326+ free (fill);
324327 break ;
325328 }
326329
327330 case TYPE_INT: {
328331 jintArray setArr = env->NewIntArray ((jsize)array_size);
329332
330- jint fill[array_size];
333+ jint *fill = (jint *)malloc (array_size * sizeof (jint));
334+
331335 for (size_t i = 0 ; i < array_size; i++)
332336 fill[i] = (jint)value_to_int (array_value[i]);
333337
334338 env->SetIntArrayRegion (setArr, 0 , array_size, fill);
335339 constructorArgs[i].l = setArr;
340+ free (fill);
336341 break ;
337342 }
338343 case TYPE_LONG: {
339344 jlongArray setArr = env->NewLongArray ((jsize)array_size);
340345
341- jlong fill[array_size];
346+ jlong *fill = (jlong *)malloc (array_size * sizeof (jlong));
347+
342348 for (size_t i = 0 ; i < array_size; i++)
343349 fill[i] = (jlong)value_to_long (array_value[i]);
344350
345351 env->SetLongArrayRegion (setArr, 0 , array_size, fill);
346352 constructorArgs[i].l = setArr;
353+ free (fill);
347354 break ;
348355 }
349356 case TYPE_FLOAT: {
350357 jfloatArray setArr = env->NewFloatArray ((jsize)array_size);
351358
352- jfloat fill[array_size];
359+ jfloat *fill = (jfloat *)malloc (array_size * sizeof (jfloat));
360+
353361 for (size_t i = 0 ; i < array_size; i++)
354362 fill[i] = (jfloat)value_to_float (array_value[i]);
355363
356364 env->SetFloatArrayRegion (setArr, 0 , array_size, fill);
357365 constructorArgs[i].l = setArr;
366+ free (fill);
358367 break ;
359368 }
360369 case TYPE_DOUBLE: {
361370 jdoubleArray setArr = env->NewDoubleArray ((jsize)array_size);
362371
363- jdouble fill[ array_size] ;
372+ jdouble * fill = (jdouble *) malloc ( array_size * sizeof (jdouble)) ;
364373 for (size_t i = 0 ; i < array_size; i++)
365374 fill[i] = (jdouble)value_to_double (array_value[i]);
366375
367376 env->SetDoubleArrayRegion (setArr, 0 , array_size, fill);
368377 constructorArgs[i].l = setArr;
378+ free (fill);
369379 break ;
370380 }
371381
@@ -702,78 +712,86 @@ int java_object_interface_set(object obj, object_impl impl, struct accessor_type
702712 {
703713 jbooleanArray setArr = java_impl->env ->NewBooleanArray ((jsize)array_size);
704714
705- jboolean fill[array_size];
715+ jboolean *fill = (jboolean *)malloc (array_size * sizeof (jboolean));
716+
706717 for (size_t i = 0 ; i < array_size; i++)
707718 fill[i] = (jboolean)value_to_bool (array_value[i]);
708719
709720 java_impl->env ->SetBooleanArrayRegion (setArr, 0 , array_size, fill);
710721 java_impl->env ->SetObjectField (conObj, fID , setArr);
722+ free (fill);
711723 }
712724 else if (!strcmp (fType , " [C" ))
713725 {
714726 jcharArray setArr = java_impl->env ->NewCharArray ((jsize)array_size);
715727
716- jchar fill[ array_size] ;
728+ jchar * fill = (jchar *) malloc ( array_size * sizeof (jchar)) ;
717729 for (size_t i = 0 ; i < array_size; i++)
718730 fill[i] = (jchar)value_to_char (array_value[i]);
719731
720732 java_impl->env ->SetCharArrayRegion (setArr, 0 , array_size, fill);
721733 java_impl->env ->SetObjectField (conObj, fID , setArr);
734+ free (fill);
722735 }
723736 else if (!strcmp (fType , " [S" ))
724737 {
725738 jshortArray setArr = java_impl->env ->NewShortArray ((jsize)array_size);
726739
727- jshort fill[ array_size] ;
740+ jshort * fill = (jshort *) malloc ( array_size * sizeof (jshort)) ;
728741 for (size_t i = 0 ; i < array_size; i++)
729742 fill[i] = (jshort)value_to_short (array_value[i]);
730743
731744 java_impl->env ->SetShortArrayRegion (setArr, 0 , array_size, fill);
732745 java_impl->env ->SetObjectField (conObj, fID , setArr);
746+ free (fill);
733747 }
734748 else if (!strcmp (fType , " [I" ))
735749 {
736750 jintArray setArr = java_impl->env ->NewIntArray ((jsize)array_size);
737751
738- jint fill[ array_size] ;
752+ jint * fill = (jint *) malloc ( array_size * sizeof (jint)) ;
739753 for (size_t i = 0 ; i < array_size; i++)
740754 fill[i] = (jint)value_to_int (array_value[i]);
741755
742756 java_impl->env ->SetIntArrayRegion (setArr, 0 , array_size, fill);
743757 java_impl->env ->SetObjectField (conObj, fID , setArr);
758+ free (fill);
744759 }
745760 else if (!strcmp (fType , " [J" ))
746761 {
747762 jlongArray setArr = java_impl->env ->NewLongArray ((jsize)array_size);
748763
749- jlong fill[ array_size] ;
764+ jlong * fill = (jlong *) malloc ( array_size * sizeof (jlong)) ;
750765 for (size_t i = 0 ; i < array_size; i++)
751766 fill[i] = (jlong)value_to_long (array_value[i]);
752767
753768 java_impl->env ->SetLongArrayRegion (setArr, 0 , array_size, fill);
754769 java_impl->env ->SetObjectField (conObj, fID , setArr);
770+ free (fill);
755771 }
756772 else if (!strcmp (fType , " [F" ))
757773 {
758774 jfloatArray setArr = java_impl->env ->NewFloatArray ((jsize)array_size);
759775
760- jfloat fill[ array_size] ;
776+ jfloat * fill = (jfloat *) malloc ( array_size * sizeof (jfloat)) ;
761777 for (size_t i = 0 ; i < array_size; i++)
762778 fill[i] = (jfloat)value_to_float (array_value[i]);
763779
764780 java_impl->env ->SetFloatArrayRegion (setArr, 0 , array_size, fill);
765781 java_impl->env ->SetObjectField (conObj, fID , setArr);
782+ free (fill);
766783 }
767784 else if (!strcmp (fType , " [D" ))
768785 {
769786 jdoubleArray setArr = java_impl->env ->NewDoubleArray ((jsize)array_size);
770787
771- jdouble fill[ array_size] ;
788+ jdouble * fill = (jdouble *) malloc ( array_size * sizeof (jdouble)) ;
772789 for (size_t i = 0 ; i < array_size; i++)
773790 fill[i] = (jdouble)value_to_double (array_value[i]);
774791
775792 java_impl->env ->SetDoubleArrayRegion (setArr, 0 , array_size, fill);
776793 java_impl->env ->SetObjectField (conObj, fID , setArr);
794+ free (fill);
777795 }
778796 else if (!strcmp (fType , " [Ljava/lang/String;" ))
779797 {
@@ -1331,78 +1349,85 @@ int java_class_interface_static_set(klass cls, class_impl impl, struct accessor_
13311349 {
13321350 jbooleanArray setArr = java_impl->env ->NewBooleanArray ((jsize)array_size);
13331351
1334- jboolean fill[ array_size] ;
1352+ jboolean * fill = (jboolean *) malloc ( array_size * sizeof (jboolean)) ;
13351353 for (size_t i = 0 ; i < array_size; i++)
13361354 fill[i] = (jboolean)value_to_bool (array_value[i]);
13371355
13381356 java_impl->env ->SetBooleanArrayRegion (setArr, 0 , array_size, fill);
13391357 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1358+ free (fill);
13401359 }
13411360 else if (!strcmp (fType , " [C" ))
13421361 {
13431362 jcharArray setArr = java_impl->env ->NewCharArray ((jsize)array_size);
13441363
1345- jchar fill[ array_size] ;
1364+ jchar * fill = (jchar *) malloc ( array_size * sizeof (jchar)) ;
13461365 for (size_t i = 0 ; i < array_size; i++)
13471366 fill[i] = (jchar)value_to_char (array_value[i]);
13481367
13491368 java_impl->env ->SetCharArrayRegion (setArr, 0 , array_size, fill);
13501369 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1370+ free (fill);
13511371 }
13521372 else if (!strcmp (fType , " [S" ))
13531373 {
13541374 jshortArray setArr = java_impl->env ->NewShortArray ((jsize)array_size);
13551375
1356- jshort fill[ array_size] ;
1376+ jshort * fill = (jshort *) malloc ( array_size * sizeof (jshort)) ;
13571377 for (size_t i = 0 ; i < array_size; i++)
13581378 fill[i] = (jshort)value_to_short (array_value[i]);
13591379
13601380 java_impl->env ->SetShortArrayRegion (setArr, 0 , array_size, fill);
13611381 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1382+ free (fill);
13621383 }
13631384 else if (!strcmp (fType , " [I" ))
13641385 {
13651386 jintArray setArr = java_impl->env ->NewIntArray ((jsize)array_size);
13661387
1367- jint fill[ array_size] ;
1388+ jint * fill = (jint *) malloc ( array_size * sizeof (jint)) ;
13681389 for (size_t i = 0 ; i < array_size; i++)
13691390 fill[i] = (jint)value_to_int (array_value[i]);
13701391
13711392 java_impl->env ->SetIntArrayRegion (setArr, 0 , array_size, fill);
13721393 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1394+ free (fill);
13731395 }
13741396 else if (!strcmp (fType , " [J" ))
13751397 {
13761398 jlongArray setArr = java_impl->env ->NewLongArray ((jsize)array_size);
13771399
1378- jlong fill[ array_size] ;
1400+ jlong * fill = (jlong *) malloc ( array_size * sizeof (jlong)) ;
13791401 for (size_t i = 0 ; i < array_size; i++)
13801402 fill[i] = (jlong)value_to_long (array_value[i]);
13811403
13821404 java_impl->env ->SetLongArrayRegion (setArr, 0 , array_size, fill);
13831405 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1406+ free (fill);
13841407 }
13851408 else if (!strcmp (fType , " [F" ))
13861409 {
13871410 jfloatArray setArr = java_impl->env ->NewFloatArray ((jsize)array_size);
13881411
1389- jfloat fill[ array_size] ;
1412+ jfloat * fill = (jfloat *) malloc ( array_size * sizeof (jfloat)) ;
13901413 for (size_t i = 0 ; i < array_size; i++)
13911414 fill[i] = (jfloat)value_to_float (array_value[i]);
13921415
13931416 java_impl->env ->SetFloatArrayRegion (setArr, 0 , array_size, fill);
13941417 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1418+ free (fill);
13951419 }
13961420 else if (!strcmp (fType , " [D" ))
13971421 {
13981422 jdoubleArray setArr = java_impl->env ->NewDoubleArray ((jsize)array_size);
13991423
1400- jdouble fill[ array_size] ;
1424+ jdouble * fill = (jdouble *) malloc ( array_size * sizeof (jdouble)) ;
14011425 for (size_t i = 0 ; i < array_size; i++)
14021426 fill[i] = (jdouble)value_to_double (array_value[i]);
14031427
14041428 java_impl->env ->SetDoubleArrayRegion (setArr, 0 , array_size, fill);
14051429 java_impl->env ->SetStaticObjectField (clscls, fID , setArr);
1430+ free (fill);
14061431 }
14071432 else if (!strcmp (fType , " [Ljava/lang/String;" ))
14081433 {
0 commit comments