Skip to content

Commit

Permalink
Remove rpc backtrace, resolve #4698
Browse files Browse the repository at this point in the history
Signed-off-by: Eval EXEC <[email protected]>
  • Loading branch information
eval-exec committed Nov 26, 2024
1 parent 80cfe48 commit 544d4c8
Showing 1 changed file with 29 additions and 1 deletion.
30 changes: 29 additions & 1 deletion rpc/src/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,32 @@ pub enum RPCError {
Indexer = -1200,
}

/// Removes the backtrace portion from an error string.
///
/// This function processes the input string `err_str` line by line and collects all lines
/// until it encounters a line starting with "Stack backtrace:". It then joins the collected
/// lines into a single string, effectively removing the backtrace section.
///
/// # Arguments
/// * `err_str` - A string slice containing the error message, potentially including a backtrace.
///
/// # Returns
/// * A `String` containing the error message without the backtrace.
///
/// # Example
/// ```
/// let error_message = "Error: Something went wrong\nStack backtrace:\n1: some_function\n2: another_function";
/// let cleaned_message = remove_backtrace(error_message);
/// assert_eq!(cleaned_message, "Error: Something went wrong");
/// ```
fn remove_backtrace(err_str: &str) -> String {
let lines: Vec<_> = err_str
.lines()
.take_while(|line| !line.starts_with("Stack backtrace:"))
.collect();
lines.join("\n")
}

impl RPCError {
/// Invalid method parameter(s).
pub fn invalid_params<T: Display>(message: T) -> Error {
Expand Down Expand Up @@ -158,10 +184,12 @@ impl RPCError {
/// The parameter `err` is usually an std error. The Display form is used as the error message,
/// and the Debug form is used as the data.
pub fn custom_with_error<T: Display + Debug>(error_code: RPCError, err: T) -> Error {
let err_str_with_backtrace = format!("{err:?}");
let err_str = remove_backtrace(&err_str_with_backtrace);
Error {
code: ErrorCode::ServerError(error_code as i64),
message: format!("{error_code:?}: {err}"),
data: Some(Value::String(format!("{err:?}"))),
data: Some(Value::String(err_str)),
}
}

Expand Down

0 comments on commit 544d4c8

Please sign in to comment.