@@ -253,15 +253,18 @@ func String(arg any) any {
253253 return fmt .Sprintf ("%v" , arg )
254254}
255255
256- func minMax (name string , fn func (any , any ) bool , args ... any ) (any , error ) {
256+ func minMax (name string , fn func (any , any ) bool , depth int , args ... any ) (any , error ) {
257+ if depth > MaxDepth {
258+ return nil , ErrorMaxDepth
259+ }
257260 var val any
258261 for _ , arg := range args {
259262 rv := reflect .ValueOf (arg )
260263 switch rv .Kind () {
261264 case reflect .Array , reflect .Slice :
262265 size := rv .Len ()
263266 for i := 0 ; i < size ; i ++ {
264- elemVal , err := minMax (name , fn , rv .Index (i ).Interface ())
267+ elemVal , err := minMax (name , fn , depth + 1 , rv .Index (i ).Interface ())
265268 if err != nil {
266269 return nil , err
267270 }
@@ -294,7 +297,10 @@ func minMax(name string, fn func(any, any) bool, args ...any) (any, error) {
294297 return val , nil
295298}
296299
297- func mean (args ... any ) (int , float64 , error ) {
300+ func mean (depth int , args ... any ) (int , float64 , error ) {
301+ if depth > MaxDepth {
302+ return 0 , 0 , ErrorMaxDepth
303+ }
298304 var total float64
299305 var count int
300306
@@ -304,7 +310,7 @@ func mean(args ...any) (int, float64, error) {
304310 case reflect .Array , reflect .Slice :
305311 size := rv .Len ()
306312 for i := 0 ; i < size ; i ++ {
307- elemCount , elemSum , err := mean (rv .Index (i ).Interface ())
313+ elemCount , elemSum , err := mean (depth + 1 , rv .Index (i ).Interface ())
308314 if err != nil {
309315 return 0 , 0 , err
310316 }
@@ -327,7 +333,10 @@ func mean(args ...any) (int, float64, error) {
327333 return count , total , nil
328334}
329335
330- func median (args ... any ) ([]float64 , error ) {
336+ func median (depth int , args ... any ) ([]float64 , error ) {
337+ if depth > MaxDepth {
338+ return nil , ErrorMaxDepth
339+ }
331340 var values []float64
332341
333342 for _ , arg := range args {
@@ -336,7 +345,7 @@ func median(args ...any) ([]float64, error) {
336345 case reflect .Array , reflect .Slice :
337346 size := rv .Len ()
338347 for i := 0 ; i < size ; i ++ {
339- elems , err := median (rv .Index (i ).Interface ())
348+ elems , err := median (depth + 1 , rv .Index (i ).Interface ())
340349 if err != nil {
341350 return nil , err
342351 }
@@ -355,18 +364,24 @@ func median(args ...any) ([]float64, error) {
355364 return values , nil
356365}
357366
358- func flatten (arg reflect.Value ) []any {
367+ func flatten (arg reflect.Value , depth int ) ([]any , error ) {
368+ if depth > MaxDepth {
369+ return nil , ErrorMaxDepth
370+ }
359371 ret := []any {}
360372 for i := 0 ; i < arg .Len (); i ++ {
361373 v := deref .Value (arg .Index (i ))
362374 if v .Kind () == reflect .Array || v .Kind () == reflect .Slice {
363- x := flatten (v )
375+ x , err := flatten (v , depth + 1 )
376+ if err != nil {
377+ return nil , err
378+ }
364379 ret = append (ret , x ... )
365380 } else {
366381 ret = append (ret , v .Interface ())
367382 }
368383 }
369- return ret
384+ return ret , nil
370385}
371386
372387func get (params ... any ) (out any , err error ) {
0 commit comments