projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix git-am --skip
[git.git]
/
refs.c
diff --git
a/refs.c
b/refs.c
index
ac26198
..
7a2c56e
100644
(file)
--- a/
refs.c
+++ b/
refs.c
@@
-292,6
+292,8
@@
int write_ref_sha1(const char *ref, int fd, const unsigned char *sha1)
return -1;
filename = ref_file_name(ref);
lock_filename = ref_lock_file_name(ref);
return -1;
filename = ref_file_name(ref);
lock_filename = ref_lock_file_name(ref);
+ if (safe_create_leading_directories(filename))
+ die("unable to create leading directory for %s", filename);
retval = write_ref_file(filename, lock_filename, fd, sha1);
free(filename);
free(lock_filename);
retval = write_ref_file(filename, lock_filename, fd, sha1);
free(filename);
free(lock_filename);
@@
-311,7
+313,9
@@
int write_ref_sha1(const char *ref, int fd, const unsigned char *sha1)
static inline int bad_ref_char(int ch)
{
return (((unsigned) ch) <= ' ' ||
static inline int bad_ref_char(int ch)
{
return (((unsigned) ch) <= ' ' ||
- ch == '~' || ch == '^' || ch == ':');
+ ch == '~' || ch == '^' || ch == ':' ||
+ /* 2.13 Pattern Matching Notation */
+ ch == '?' || ch == '*' || ch == '[');
}
int check_ref_format(const char *ref)
}
int check_ref_format(const char *ref)
@@
-343,6
+347,14
@@
int check_ref_format(const char *ref)
if (!ch) {
if (level < 2)
return -1; /* at least of form "heads/blah" */
if (!ch) {
if (level < 2)
return -1; /* at least of form "heads/blah" */
+
+ /* Do not allow ref name to end in "HEAD"
+ * Note that cp is poiting at one past NUL at the end.
+ * i.e. cp[-1] = NUL.
+ */
+ if (5 <= cp - ref && !strcmp(cp - 5, "HEAD"))
+ return -1;
+
return 0;
}
}
return 0;
}
}
@@
-358,6
+370,8
@@
int write_ref_sha1_unlocked(const char *ref, const unsigned char *sha1)
return -1;
filename = ref_file_name(ref);
lock_filename = ref_lock_file_name(ref);
return -1;
filename = ref_file_name(ref);
lock_filename = ref_lock_file_name(ref);
+ if (safe_create_leading_directories(filename))
+ die("unable to create leading directory for %s", filename);
fd = open(lock_filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
if (fd < 0) {
error("Writing %s", lock_filename);
fd = open(lock_filename, O_WRONLY | O_CREAT | O_EXCL, 0666);
if (fd < 0) {
error("Writing %s", lock_filename);