ref: f0ef1a4be02affea6543834b54a15df7e40fc7b3
parent: 4c6701041ec241bbb900883043790af2fd5e8152
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Aug 5 03:12:37 EDT 2024
git/fs: don't allow walking blobs
--- a/sys/src/cmd/git/fs.c
+++ b/sys/src/cmd/git/fs.c
@@ -72,9 +72,11 @@
#define Eperm "permission denied"
#define Eexist "file does not exist"
+#define Enotdir "is not a directory"
#define E2long "path too long"
#define Enodir "not a directory"
#define Erepo "unable to read repo"
+#define Eimpl "not implemented"
#define Egreg "wat"
#define Ebadobj "invalid object"
@@ -472,7 +474,11 @@
e = nil;
if(!o)
return Eexist;
- if(o->type == GTree){
+ switch(o->type){
+ case GBlob:
+ e = Enotdir;
+ break;
+ case GTree:
q->type = 0;
for(i = 0; i < o->tree->nent; i++){
if(strcmp(o->tree->ent[i].name, name) != 0)
@@ -495,7 +501,8 @@
}
if(!w)
e = Eexist;
- }else if(o->type == GCommit){
+ break;
+ case GCommit:
q->type = 0;
c->mtime = o->commit->mtime;
c->mode = 0644;
@@ -521,8 +528,10 @@
}
else
e = Eexist;
- }else if(o->type == GTag){
- e = "tag walk unimplemented";
+ break;
+ case GTag:
+ e = Eimpl;
+ break;
}
return e;
}
--
⑨