shithub: front

Download patch

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;
 }
--