Commit Diff


commit - eef6493a8d08ef874a8060f8966241d8c1337168
commit + 4e8cda5531c5c4065304f6e9372113dc81a870b0
blob - 86f4debca99a0996d1ad5d5ee01f1073caaa503e
blob + 4e2e9d2db6ac7e5051f17ad50bcdcdd6274f5659
--- lib/pack.c
+++ lib/pack.c
@@ -458,6 +458,23 @@ open_offset_delta_object(struct got_object **obj, stru
 	if (err)
 		return err;
 
+	/*
+	 * XXX We currently only support plain objects as a delta base,
+	 * i.e. deltas cannot be chained. Is this a problem?
+	 * If so, we would have to resolve a plain object base type here.
+	 */
+	switch (base_type) {
+	case GOT_OBJ_TYPE_COMMIT:
+	case GOT_OBJ_TYPE_TREE:
+	case GOT_OBJ_TYPE_BLOB:
+	case GOT_OBJ_TYPE_TAG:
+		break;
+	case GOT_OBJ_TYPE_OFFSET_DELTA:
+	case GOT_OBJ_TYPE_REF_DELTA:
+	default:
+		return got_error(GOT_ERR_NOT_IMPL);
+	}
+
 	*obj = calloc(1, sizeof(**obj));
 	if (*obj == NULL)
 		return got_error(GOT_ERR_NO_MEM);