From 1281bf08227fc7088207da53a7727a8bdded7201 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 24 Nov 2025 12:46:27 +0000 Subject: [PATCH] Reject write operations with expect_gen=0 Per PROTOCOL.txt specification, WRITE operations must provide a valid generation counter and cannot use expect_gen=0 (unlike other operations). This ensures the client has retrieved the file's metadata and knows the correct chunk size before writing. Changes: - Added FILETREE_BADGEN error code (-8) - Modified file_tree_write() to reject expect_gen=0 - Added error message for FILETREE_BADGEN --- src/file_tree.c | 5 +++++ src/file_tree.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/file_tree.c b/src/file_tree.c index 56b9262..483037d 100644 --- a/src/file_tree.c +++ b/src/file_tree.c @@ -366,6 +366,10 @@ int file_tree_write(FileTree *ft, string path, SHA256 *removed_hashes, int *num_removed) { + // Per protocol spec, WRITE operations cannot use expect_gen=0 + if (expect_gen == NO_GENERATION) + return FILETREE_BADGEN; + int num_comps; string comps[MAX_COMPS]; @@ -534,6 +538,7 @@ string file_tree_strerror(int code) case FILETREE_EXISTS : return S("File or directory already exists"); case FILETREE_BADPATH: return S("Invalid path"); case FILETREE_BADOP : return S("Invalid operation"); + case FILETREE_BADGEN : return S("Generation counter cannot be zero for write operations"); default:break; } return S("Unknown error"); diff --git a/src/file_tree.h b/src/file_tree.h index 75e7946..60e67fc 100644 --- a/src/file_tree.h +++ b/src/file_tree.h @@ -13,6 +13,7 @@ enum { FILETREE_EXISTS = -5, FILETREE_BADPATH = -6, FILETREE_BADOP = -7, + FILETREE_BADGEN = -8, }; typedef struct Entity Entity;