tangled
alpha
login
or
join now
fuwn.net
/
germ
0
fork
atom
🦠 The Definitive Gemini Protocol Toolkit
gemini
gemini-protocol
gemtext
parser
zero-dependency
toolkit
ast
converter
html
markdown
cli
networking
0
fork
atom
overview
issues
pulls
pipelines
fix(meta): Better comply with RFC 2045
fuwn.net
6 months ago
f80e2cd0
51e79294
verified
This commit was signed with the committer's
known signature
.
fuwn.net
SSH Key Fingerprint:
SHA256:VPdFPyPbd6JkoMyWUdZ/kkTcIAt3sxjXD2XSAZ7FYC4=
+20
-6
2 changed files
expand all
collapse all
unified
split
src
meta.rs
tests
meta.rs
+8
-6
src/meta.rs
···
78
78
let mut parameters = HashMap::new();
79
79
80
80
for parameter in metas {
81
81
-
let key_value =
82
82
-
parameter.trim_start().split_at(parameter.find('=').unwrap_or(0));
81
81
+
let trimmed = parameter.trim_start();
83
82
84
84
-
parameters.insert(
85
85
-
key_value.0.to_string().replace('=', ""),
86
86
-
key_value.1.to_string(),
87
87
-
);
83
83
+
// Only parse parameters containing '=' as those without are malformed
84
84
+
// according to RFC 2045
85
85
+
if let Some(equal_pos) = trimmed.find('=') {
86
86
+
let (key, value) = trimmed.split_at(equal_pos);
87
87
+
88
88
+
parameters.insert(key.to_string(), value[1..].to_string());
89
89
+
}
88
90
}
89
91
90
92
Self { mime, parameters }
+12
tests/meta.rs
···
90
90
2,
91
91
);
92
92
}
93
93
+
94
94
+
#[test]
95
95
+
fn meta_handles_malformed_parameters() {
96
96
+
let meta =
97
97
+
Meta::from_string("text/gemini; valid=value; malformed; another=test");
98
98
+
99
99
+
assert_eq!(meta.mime(), "text/gemini");
100
100
+
assert_eq!(meta.parameters().len(), 2);
101
101
+
assert_eq!(meta.parameters().get("valid"), Some(&"value".to_string()));
102
102
+
assert_eq!(meta.parameters().get("another"), Some(&"test".to_string()));
103
103
+
assert_eq!(meta.parameters().get("malformed"), None);
104
104
+
}
93
105
}