Skip to content

Commit bc76986

Browse files
Preslav LeConvex, Inc.
authored andcommitted
Warn instead of error for unparsable file names (#24775)
Skip instead of failing if we see unexpected file names in traces. GitOrigin-RevId: 1571cfad3c99ac363e8ba065d3bc8958ce8a820a
1 parent e94ca23 commit bc76986

File tree

7 files changed

+33
-16
lines changed

7 files changed

+33
-16
lines changed

crates/common/src/errors.rs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -468,7 +468,7 @@ impl JsError {
468468
frame_data: Vec<FrameData>,
469469
custom_data: Option<ConvexValue>,
470470
mut lookup_source_map: impl FnMut(&ModuleSpecifier) -> anyhow::Result<Option<SourceMap>>,
471-
) -> anyhow::Result<Self> {
471+
) -> Self {
472472
let mut source_maps = BTreeMap::new();
473473
let mut mapped_frames = Vec::with_capacity(frame_data.len());
474474
for mut frame in frame_data {
@@ -479,10 +479,24 @@ impl JsError {
479479
..
480480
} = frame
481481
{
482-
let specifier = ModuleSpecifier::parse(f)?;
482+
let Ok(specifier) = ModuleSpecifier::parse(f) else {
483+
// We expect the file_name to be fully qualified URL but seems
484+
// this is not always the case. Lets log warning here.
485+
tracing::warn!("Skipping frame with invalid file_name: {f}");
486+
continue;
487+
};
483488
let source_map = match source_maps.entry(specifier) {
484489
Entry::Vacant(e) => {
485-
let Some(source_map) = lookup_source_map(e.key())? else {
490+
let maybe_source_map = match lookup_source_map(e.key()) {
491+
Ok(maybe_source_map) => maybe_source_map,
492+
Err(err) => {
493+
// This is not expected so report an error.
494+
let mut err = err.context("Failed to lookup source_map");
495+
report_error(&mut err);
496+
continue;
497+
},
498+
};
499+
let Some(source_map) = maybe_source_map else {
486500
tracing::debug!("Missing source map for {}", e.key());
487501
continue;
488502
};
@@ -518,15 +532,15 @@ impl JsError {
518532
mapped_frames.pop();
519533
}
520534

521-
Ok(JsError {
535+
JsError {
522536
message,
523537
custom_data,
524538
frames: Some(JsFrames(mapped_frames.into())),
525-
})
539+
}
526540
}
527541

528542
#[cfg(any(test, feature = "testing"))]
529-
pub fn from_frames_for_test(message: &str, frames: Vec<&str>) -> anyhow::Result<Self> {
543+
pub fn from_frames_for_test(message: &str, frames: Vec<&str>) -> Self {
530544
let frame_data = frames
531545
.into_iter()
532546
.map(|filename| FrameData {

crates/common/src/log_streaming.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl LogEvent {
107107
cached: None,
108108
});
109109
Self::construct_exception(
110-
&JsError::from_frames_for_test("test_message", vec!["test_frame_1", "test_frame_2"])?,
110+
&JsError::from_frames_for_test("test_message", vec!["test_frame_1", "test_frame_2"]),
111111
runtime.unix_timestamp(),
112112
source,
113113
Some("1.5.1"),

crates/isolate/src/error.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,12 @@ impl<'a, 'b, RT: Runtime, E: IsolateEnvironment<RT>> ExecutionScope<'a, 'b, RT,
4949
exception: v8::Local<v8::Value>,
5050
) -> anyhow::Result<JsError> {
5151
let (message, frame_data, custom_data) = extract_source_mapped_error(self, exception)?;
52-
JsError::from_frames(message, frame_data, custom_data, |s| {
53-
self.lookup_source_map(s)
54-
})
52+
Ok(JsError::from_frames(
53+
message,
54+
frame_data,
55+
custom_data,
56+
|s| self.lookup_source_map(s),
57+
))
5558
}
5659

5760
pub fn lookup_source_map(

crates/isolate/src/isolate2/entered_context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,7 @@ impl<'enter, 'scope: 'enter> EnteredContext<'enter, 'scope> {
592592
extract_source_mapped_error(self.scope, exception)?;
593593
JsError::from_frames(message, frame_data, custom_data, |s| {
594594
self.lookup_source_map(s)
595-
})?
595+
})
596596
};
597597
let err = match err {
598598
Ok(e) => e,

crates/isolate/src/ops/console.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ pub fn op_console_trace<'b, P: OpProvider<'b>>(
2727
) -> anyhow::Result<()> {
2828
let js_error = JsError::from_frames("".to_string(), frame_data, None, |s| {
2929
provider.lookup_source_map(s)
30-
})?;
30+
});
3131
messages.push(js_error.to_string());
3232
provider.trace(LogLevel::Log, messages)?;
3333
Ok(())

crates/isolate/src/ops/errors.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub fn op_throw_uncatchable_developer_error<'b, P: OpProvider<'b>>(
1616
) -> anyhow::Result<()> {
1717
let js_error = JsError::from_frames(message.clone(), frame_data, None, |s| {
1818
provider.lookup_source_map(s)
19-
})?;
19+
});
2020
report_error(&mut anyhow::anyhow!(format!(
2121
"UncatchableDeveloperError: {}",
2222
message
@@ -34,7 +34,7 @@ pub fn op_error_stack<'b, P: OpProvider<'b>>(
3434
) -> anyhow::Result<String> {
3535
let js_error = JsError::from_frames(String::new(), frame_data, None, |s| {
3636
provider.lookup_source_map(s)
37-
})?;
37+
});
3838
Ok(js_error
3939
.frames
4040
.expect("JsError::from_frames has frames=None")

crates/node_executor/src/executor.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ fn construct_js_error(
165165
Ok(Some(sourcemap::SourceMap::from_slice(
166166
source_map.as_bytes(),
167167
)?))
168-
})?
168+
})
169169
},
170170
None => JsError::from_message(message),
171171
};
@@ -318,7 +318,7 @@ impl Actions {
318318
if let Some(frames) = frames {
319319
Ok(Err(JsError::from_frames(message, frames, None, |_| {
320320
Ok(None)
321-
})?))
321+
})))
322322
} else {
323323
Ok(Err(JsError::from_message(message)))
324324
}

0 commit comments

Comments
 (0)