Skip to content

Commit 15862b8

Browse files
committed
Add version prefix to git format
1 parent 4fed714 commit 15862b8

File tree

4 files changed

+34
-3
lines changed

4 files changed

+34
-3
lines changed

crates/backends/git/src/key_store.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,10 @@ impl KeyStore {
142142
let data = task_to_data(task);
143143

144144
let iv = iv.unwrap_or_else(generate_iv);
145-
let encrypted = key.encrypt_with_iv(&iv, &data[16..], task.uuid.as_bytes())?;
145+
146+
let mut aad = vec![0];
147+
aad.extend_from_slice(task.uuid.as_bytes());
148+
let encrypted = key.encrypt_with_iv(&iv, &data[(1 + 16)..], &aad)?;
146149
let base64 = base64_encode(encrypted);
147150

148151
drop(keys);
@@ -171,7 +174,7 @@ impl KeyStore {
171174
return Ok((generate_iv(), task));
172175
};
173176

174-
let (aad, iv, decrypted) = key.decrypt(&base64, Uuid::max().as_bytes().len())?;
177+
let (aad, iv, decrypted) = key.decrypt(&base64, 1 + Uuid::max().as_bytes().len())?;
175178

176179
let mut data = aad.to_vec();
177180
data.extend_from_slice(&decrypted);

crates/backends/git/src/serialization/mod.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ mod tests;
88
#[must_use]
99
pub(crate) fn task_to_data(task: &Task) -> Vec<u8> {
1010
let mut result = Vec::new();
11+
result.extend_from_slice(b"\0".as_slice());
1112
result.extend_from_slice(task.uuid.as_bytes());
1213
result.extend_from_slice(&task.entry.timestamp_micros().to_be_bytes());
1314
result.extend_from_slice(&(task.title.len() as u32).to_be_bytes());
@@ -77,6 +78,11 @@ pub(crate) fn task_to_data(task: &Task) -> Vec<u8> {
7778
#[allow(clippy::too_many_lines)]
7879
#[must_use]
7980
pub(crate) fn task_from_data(input: &[u8]) -> Option<Task> {
81+
let (version, input) = input.split_first_chunk::<1>()?;
82+
if version[0] != 0 {
83+
return None;
84+
}
85+
8086
let (uuid_bytes, input) = input.split_first_chunk::<16>()?;
8187
let uuid = Uuid::from_bytes(*uuid_bytes);
8288

crates/backends/git/src/serialization/tests.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ fn serialize_simple_task() {
4040
assert_eq!(
4141
data,
4242
concat(&[
43+
b"\0",
4344
CONSTANT_UUID_BYTES,
4445
CONSTANT_DATETIME_BYTES,
4546
(title.len() as u32).to_be_bytes().as_slice(),
@@ -52,6 +53,7 @@ fn serialize_simple_task() {
5253
fn deserialize_simple_task() {
5354
let title = "Hello there!";
5455
let task = task_from_data(&concat(&[
56+
b"\0",
5557
CONSTANT_UUID_BYTES,
5658
CONSTANT_DATETIME_BYTES,
5759
(title.len() as u32).to_be_bytes().as_slice(),
@@ -70,6 +72,7 @@ fn serialize_title_with_emoji() {
7072
assert_eq!(
7173
data,
7274
concat(&[
75+
b"\0",
7376
CONSTANT_UUID_BYTES,
7477
CONSTANT_DATETIME_BYTES,
7578
(title.len() as u32).to_be_bytes().as_slice(),
@@ -82,6 +85,7 @@ fn serialize_title_with_emoji() {
8285
fn deserialize_title_with_emoji() {
8386
let title = "do something... maybe 🤔";
8487
let task = task_from_data(&concat(&[
88+
b"\0",
8589
CONSTANT_UUID_BYTES,
8690
CONSTANT_DATETIME_BYTES,
8791
(title.len() as u32).to_be_bytes().as_slice(),
@@ -100,6 +104,7 @@ fn serialize_title_with_escape_sequence() {
100104
assert_eq!(
101105
data,
102106
concat(&[
107+
b"\0",
103108
CONSTANT_UUID_BYTES,
104109
CONSTANT_DATETIME_BYTES,
105110
(title.len() as u32).to_be_bytes().as_slice(),
@@ -112,6 +117,7 @@ fn serialize_title_with_escape_sequence() {
112117
fn deserialize_title_with_escape_sequence() {
113118
let title = "descri\tion wit\t\"\0\n";
114119
let task = task_from_data(&concat(&[
120+
b"\0",
115121
CONSTANT_UUID_BYTES,
116122
CONSTANT_DATETIME_BYTES,
117123
(title.len() as u32).to_be_bytes().as_slice(),
@@ -130,6 +136,7 @@ fn serialize_task_with_dates() {
130136
assert_eq!(
131137
task_to_data(&task),
132138
concat(&[
139+
b"\0",
133140
CONSTANT_UUID_BYTES,
134141
CONSTANT_DATETIME_BYTES,
135142
(title.len() as u32).to_be_bytes().as_slice(),
@@ -143,6 +150,7 @@ fn serialize_task_with_dates() {
143150
assert_eq!(
144151
task_to_data(&task),
145152
concat(&[
153+
b"\0",
146154
CONSTANT_UUID_BYTES,
147155
CONSTANT_DATETIME_BYTES,
148156
(title.len() as u32).to_be_bytes().as_slice(),
@@ -159,6 +167,7 @@ fn serialize_task_with_dates() {
159167
fn deserialize_task_with_dates() {
160168
let title = "Hello there!";
161169
let task = task_from_data(&concat(&[
170+
b"\0",
162171
CONSTANT_UUID_BYTES,
163172
CONSTANT_DATETIME_BYTES,
164173
(title.len() as u32).to_be_bytes().as_slice(),
@@ -188,6 +197,7 @@ fn serialize_task_with_tags() {
188197
assert_eq!(
189198
task_to_data(&task),
190199
concat(&[
200+
b"\0",
191201
CONSTANT_UUID_BYTES,
192202
CONSTANT_DATETIME_BYTES,
193203
(title.len() as u32).to_be_bytes().as_slice(),
@@ -209,6 +219,7 @@ fn serialize_task_with_tags() {
209219
fn deserialize_task_with_tags() {
210220
let title = "Hello there!";
211221
let task = task_from_data(&concat(&[
222+
b"\0",
212223
CONSTANT_UUID_BYTES,
213224
CONSTANT_DATETIME_BYTES,
214225
(title.len() as u32).to_be_bytes().as_slice(),
@@ -239,6 +250,7 @@ fn serialize_task_with_project() {
239250
assert_eq!(
240251
task_to_data(&task),
241252
concat(&[
253+
b"\0",
242254
CONSTANT_UUID_BYTES,
243255
CONSTANT_DATETIME_BYTES,
244256
(title.len() as u32).to_be_bytes().as_slice(),
@@ -254,6 +266,7 @@ fn serialize_task_with_project() {
254266
fn deserialize_task_with_project() {
255267
let title = "Hello there!";
256268
let task = task_from_data(&concat(&[
269+
b"\0",
257270
CONSTANT_UUID_BYTES,
258271
CONSTANT_DATETIME_BYTES,
259272
(title.len() as u32).to_be_bytes().as_slice(),
@@ -278,6 +291,7 @@ fn serialize_task_with_priority() {
278291
assert_eq!(
279292
task_to_data(&task),
280293
concat(&[
294+
b"\0",
281295
CONSTANT_UUID_BYTES,
282296
CONSTANT_DATETIME_BYTES,
283297
(title.len() as u32).to_be_bytes().as_slice(),
@@ -291,6 +305,7 @@ fn serialize_task_with_priority() {
291305
fn deserialize_task_with_priority() {
292306
let title = "Hello there!";
293307
let task = task_from_data(&concat(&[
308+
b"\0",
294309
CONSTANT_UUID_BYTES,
295310
CONSTANT_DATETIME_BYTES,
296311
(title.len() as u32).to_be_bytes().as_slice(),
@@ -314,6 +329,7 @@ fn serialize_task_with_depends() {
314329
assert_eq!(
315330
task_to_data(&task),
316331
concat(&[
332+
b"\0",
317333
CONSTANT_UUID_BYTES,
318334
CONSTANT_DATETIME_BYTES,
319335
(title.len() as u32).to_be_bytes().as_slice(),
@@ -330,6 +346,7 @@ fn serialize_task_with_depends() {
330346
fn deserialize_task_with_depends() {
331347
let title = "Hello there!";
332348
let task = task_from_data(&concat(&[
349+
b"\0",
333350
CONSTANT_UUID_BYTES,
334351
CONSTANT_DATETIME_BYTES,
335352
(title.len() as u32).to_be_bytes().as_slice(),
@@ -363,6 +380,7 @@ fn serialize_task_with_annotations() {
363380
assert_eq!(
364381
task_to_data(&task),
365382
concat(&[
383+
b"\0",
366384
CONSTANT_UUID_BYTES,
367385
CONSTANT_DATETIME_BYTES,
368386
(title.len() as u32).to_be_bytes().as_slice(),
@@ -383,6 +401,7 @@ fn serialize_task_with_annotations() {
383401
fn deserialize_task_with_annotations() {
384402
let title = "Hello there!";
385403
let task = task_from_data(&concat(&[
404+
b"\0",
386405
CONSTANT_UUID_BYTES,
387406
CONSTANT_DATETIME_BYTES,
388407
(title.len() as u32).to_be_bytes().as_slice(),
@@ -428,6 +447,7 @@ fn serialize_task_with_udas() {
428447
assert_eq!(
429448
task_to_data(&task),
430449
concat(&[
450+
b"\0",
431451
CONSTANT_UUID_BYTES,
432452
CONSTANT_DATETIME_BYTES,
433453
(title.len() as u32).to_be_bytes().as_slice(),
@@ -454,6 +474,7 @@ fn serialize_task_with_udas() {
454474
fn deserialize_task_with_udas() {
455475
let title = "Hello there!";
456476
let task = task_from_data(&concat(&[
477+
b"\0",
457478
CONSTANT_UUID_BYTES,
458479
CONSTANT_DATETIME_BYTES,
459480
(title.len() as u32).to_be_bytes().as_slice(),
@@ -523,6 +544,7 @@ fn serialize_task_with_all_attributes() {
523544
assert_eq!(
524545
task_to_data(&task),
525546
concat(&[
547+
b"\0",
526548
CONSTANT_UUID_BYTES,
527549
CONSTANT_DATETIME_BYTES,
528550
(title.len() as u32).to_be_bytes().as_slice(),
@@ -582,6 +604,7 @@ fn serialize_task_with_all_attributes() {
582604
fn deserialize_task_with_all_attributes() {
583605
let title = "Hello there!";
584606
let task = task_from_data(&concat(&[
607+
b"\0",
585608
CONSTANT_UUID_BYTES,
586609
CONSTANT_DATETIME_BYTES,
587610
(title.len() as u32).to_be_bytes().as_slice(),

crates/flutter_bridge/tests/common/mod.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,6 @@ pub(crate) fn setup(test_name: &str) -> Result<TestFixture, std::io::Error> {
7474

7575
Settings::load(stride_flutter_bridge::api::settings::ApplicationPaths {
7676
cache_path: cache_dir.clone().to_string_lossy().to_string(),
77-
document_path: document_dir.clone().to_string_lossy().to_string(),
7877
support_path: support_dir.clone().to_string_lossy().to_string(),
7978
log_path: cache_dir
8079
.join("logs")

0 commit comments

Comments
 (0)