(i *interpreter, input value)
| 983 | } |
| 984 | |
| 985 | func builtinBase64(i *interpreter, input value) (value, error) { |
| 986 | var byteArr []byte |
| 987 | |
| 988 | var sanityCheck = func(v int) (string, bool) { |
| 989 | if v < 0 || 255 < v { |
| 990 | msg := fmt.Sprintf("base64 encountered invalid codepoint value in the array (must be 0 <= X <= 255), got %d", v) |
| 991 | return msg, false |
| 992 | } |
| 993 | |
| 994 | return "", true |
| 995 | } |
| 996 | |
| 997 | switch input.(type) { |
| 998 | case valueString: |
| 999 | vStr, err := i.getString(input) |
| 1000 | if err != nil { |
| 1001 | return nil, err |
| 1002 | } |
| 1003 | |
| 1004 | str := vStr.getGoString() |
| 1005 | for _, r := range str { |
| 1006 | n := int(r) |
| 1007 | msg, ok := sanityCheck(n) |
| 1008 | if !ok { |
| 1009 | return nil, makeRuntimeError(msg, i.getCurrentStackTrace()) |
| 1010 | } |
| 1011 | } |
| 1012 | |
| 1013 | byteArr = []byte(str) |
| 1014 | case *valueArray: |
| 1015 | vArr, err := i.getArray(input) |
| 1016 | if err != nil { |
| 1017 | return nil, err |
| 1018 | } |
| 1019 | |
| 1020 | for _, cThunk := range vArr.elements { |
| 1021 | cTv, err := cThunk.getValue(i) |
| 1022 | if err != nil { |
| 1023 | return nil, err |
| 1024 | } |
| 1025 | |
| 1026 | vInt, err := i.getInt(cTv) |
| 1027 | if err != nil { |
| 1028 | msg := fmt.Sprintf("base64 encountered a non-integer value in the array, got %s", cTv.getType().name) |
| 1029 | return nil, makeRuntimeError(msg, i.getCurrentStackTrace()) |
| 1030 | } |
| 1031 | |
| 1032 | msg, ok := sanityCheck(vInt) |
| 1033 | if !ok { |
| 1034 | return nil, makeRuntimeError(msg, i.getCurrentStackTrace()) |
| 1035 | } |
| 1036 | |
| 1037 | byteArr = append(byteArr, byte(vInt)) |
| 1038 | } |
| 1039 | default: |
| 1040 | msg := fmt.Sprintf("base64 can only base64 encode strings / arrays of single bytes, got %s", input.getType().name) |
| 1041 | return nil, makeRuntimeError(msg, i.getCurrentStackTrace()) |
| 1042 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…