| // Copyright (c) The OpenTofu Authors | |
| // SPDX-License-Identifier: MPL-2.0 | |
| // Copyright (c) 2023 HashiCorp, Inc. | |
| // SPDX-License-Identifier: MPL-2.0 | |
| package aesgcm | |
| import "fmt" | |
| // handlePanic runs the specified function and returns its result value or returned error. If a panic occurs, it returns the | |
| // panic as an error. | |
| func handlePanic(f func() ([]byte, error)) (result []byte, err error) { | |
| result, e := func() ([]byte, error) { | |
| defer func() { | |
| var ok bool | |
| e := recover() | |
| if e == nil { | |
| return | |
| } | |
| if err, ok = e.(error); !ok { | |
| // In case the panic is not an error | |
| err = fmt.Errorf("%v", e) | |
| } | |
| }() | |
| return f() | |
| }() | |
| if err != nil { | |
| return nil, err | |
| } | |
| return result, e | |
| } |