Skip to content

Commit 9a9cca8

Browse files
committed
first review pass for existing protobuf parsing
1 parent 5b39133 commit 9a9cca8

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

mitmproxy-contentviews/src/protobuf/raw_to_proto.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub(crate) fn merge_proto_and_descriptor(
3737
file_descriptor_proto.message_type[message_idx] = new_proto;
3838

3939
/*
40-
XXX: Not sure if this would be the right thing to do here
40+
XXX: Skipping this as it doesn't seem to bring any immediate benefits.
4141
let dependencies = dependencies
4242
.iter()
4343
.cloned()
@@ -89,7 +89,7 @@ fn create_descriptor_proto(
8989
) -> anyhow::Result<DescriptorProto> {
9090
let message = existing
9191
.parse_from_bytes(data)
92-
.context("failed to parse protobuf")?;
92+
.with_context(|| format!("failed to parse protobuf: {}", existing.full_name()))?;
9393

9494
let mut descriptor = existing.proto().clone();
9595

mitmproxy-contentviews/src/protobuf/view_protobuf.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use crate::protobuf::raw_to_proto::new_empty_descriptor;
2-
use crate::protobuf::{proto_to_yaml, raw_to_proto, reencode, yaml_to_pretty};
2+
use crate::protobuf::{
3+
existing_proto_definitions, proto_to_yaml, raw_to_proto, reencode, yaml_to_pretty,
4+
};
35
use crate::{Metadata, Prettify, Reencode};
46
use anyhow::{Context, Result};
57
use mitmproxy_highlight::Language;
@@ -35,9 +37,10 @@ impl Prettify for Protobuf {
3537
Language::Yaml
3638
}
3739

38-
fn prettify(&self, data: &[u8], _metadata: &dyn Metadata) -> Result<String> {
39-
// FIXME use new create_new
40-
self.prettify_with_descriptor(data, &new_empty_descriptor(None, "Unknown"), &[])
40+
fn prettify(&self, data: &[u8], metadata: &dyn Metadata) -> Result<String> {
41+
let (descriptor, dependencies) = existing_proto_definitions::find_best_match(metadata)?
42+
.unwrap_or_else(|| (new_empty_descriptor(None, "Unknown"), vec![]));
43+
self.prettify_with_descriptor(data, &descriptor, &dependencies)
4144
}
4245

4346
fn render_priority(&self, _data: &[u8], metadata: &dyn Metadata) -> f64 {
@@ -211,4 +214,24 @@ mod tests {
211214
let result = Protobuf.prettify(b"", &TestMetadata::default()).unwrap();
212215
assert_eq!(result, "{} # empty protobuf message");
213216
}
217+
218+
#[test]
219+
fn test_existing() {
220+
let metadata = TestMetadata::default().with_protobuf_definitions(concat!(
221+
env!("CARGO_MANIFEST_DIR"),
222+
"/testdata/protobuf/simple.proto"
223+
));
224+
let result = Protobuf.prettify(varint::PROTO, &metadata).unwrap();
225+
assert_eq!(result, "example: 150\n");
226+
}
227+
228+
#[test]
229+
fn test_existing_mismatch() {
230+
let metadata = TestMetadata::default().with_protobuf_definitions(concat!(
231+
env!("CARGO_MANIFEST_DIR"),
232+
"/testdata/protobuf/simple.proto"
233+
));
234+
let result = Protobuf.prettify(string::PROTO, &metadata);
235+
assert!(result.is_err());
236+
}
214237
}

0 commit comments

Comments
 (0)