summaryrefslogtreecommitdiffstats
path: root/ipc
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2019-06-20 11:42:45 +0200
committerJustus Winter <justus@sequoia-pgp.org>2019-06-24 19:00:37 +0200
commitd1c9bd08e23aa8901028dceb1e63cb8fd7ae5ddc (patch)
treecb6fa4c7af585b260123630d8d66866c206936d3 /ipc
parent8c2fe1cd84d0bab1e56d3ad96e7818697a7ac4ab (diff)
ipc: Fix handling of data lines.
Diffstat (limited to 'ipc')
-rw-r--r--ipc/src/assuan/mod.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/ipc/src/assuan/mod.rs b/ipc/src/assuan/mod.rs
index 0d5110b0..a24c48e8 100644
--- a/ipc/src/assuan/mod.rs
+++ b/ipc/src/assuan/mod.rs
@@ -93,22 +93,27 @@ impl Client {
let mut data = data.as_ref();
let mut request = Vec::with_capacity(data.len());
while ! data.is_empty() {
- let line_len = 2;
if request.len() > 0 {
request.push(0x0a);
}
write!(&mut request, "D ").unwrap();
+ let mut line_len = 2;
while ! data.is_empty() && line_len < MAX_LINE_LENGTH - 3 {
let c = data[0];
data = &data[1..];
match c as char {
- '%' | '\n' | '\r' =>
- write!(&mut request, "%{:02X}", c).unwrap(),
- _ => request.push(c),
+ '%' | '\n' | '\r' => {
+ line_len += 3;
+ write!(&mut request, "%{:02X}", c).unwrap();
+ },
+ _ => {
+ line_len += 1;
+ request.push(c);
+ },
}
}
}
- write!(&mut request, "END").unwrap();
+ write!(&mut request, "\nEND").unwrap();
self.send(request)
}
}