Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
git
提交
4cbf42e1
G
git
项目概览
李少辉-开发者
/
git
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
git
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4cbf42e1
编写于
5月 21, 2010
作者:
J
Junio C Hamano
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'jn/fsck-ident'
* jn/fsck-ident: fsck: check ident lines in commit objects
上级
921296d3
daae1922
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
75 addition
and
0 deletion
+75
-0
fsck.c
fsck.c
+47
-0
t/t1450-fsck.sh
t/t1450-fsck.sh
+28
-0
未找到文件。
fsck.c
浏览文件 @
4cbf42e1
...
...
@@ -222,12 +222,47 @@ static int fsck_tree(struct tree *item, int strict, fsck_error error_func)
return
retval
;
}
static
int
fsck_ident
(
char
**
ident
,
struct
object
*
obj
,
fsck_error
error_func
)
{
if
(
**
ident
==
'<'
||
**
ident
==
'\n'
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - missing space before email"
);
*
ident
+=
strcspn
(
*
ident
,
"<
\n
"
);
if
((
*
ident
)[
-
1
]
!=
' '
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - missing space before email"
);
if
(
**
ident
!=
'<'
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - missing email"
);
(
*
ident
)
++
;
*
ident
+=
strcspn
(
*
ident
,
"<>
\n
"
);
if
(
**
ident
!=
'>'
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - bad email"
);
(
*
ident
)
++
;
if
(
**
ident
!=
' '
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - missing space before date"
);
(
*
ident
)
++
;
if
(
**
ident
==
'0'
&&
(
*
ident
)[
1
]
!=
' '
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - zero-padded date"
);
*
ident
+=
strspn
(
*
ident
,
"0123456789"
);
if
(
**
ident
!=
' '
)
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - bad date"
);
(
*
ident
)
++
;
if
((
**
ident
!=
'+'
&&
**
ident
!=
'-'
)
||
!
isdigit
((
*
ident
)[
1
])
||
!
isdigit
((
*
ident
)[
2
])
||
!
isdigit
((
*
ident
)[
3
])
||
!
isdigit
((
*
ident
)[
4
])
||
((
*
ident
)[
5
]
!=
'\n'
))
return
error_func
(
obj
,
FSCK_ERROR
,
"invalid author/committer line - bad time zone"
);
(
*
ident
)
+=
6
;
return
0
;
}
static
int
fsck_commit
(
struct
commit
*
commit
,
fsck_error
error_func
)
{
char
*
buffer
=
commit
->
buffer
;
unsigned
char
tree_sha1
[
20
],
sha1
[
20
];
struct
commit_graft
*
graft
;
int
parents
=
0
;
int
err
;
if
(
commit
->
date
==
ULONG_MAX
)
return
error_func
(
&
commit
->
object
,
FSCK_ERROR
,
"invalid author/committer line"
);
...
...
@@ -266,6 +301,18 @@ static int fsck_commit(struct commit *commit, fsck_error error_func)
}
if
(
memcmp
(
buffer
,
"author "
,
7
))
return
error_func
(
&
commit
->
object
,
FSCK_ERROR
,
"invalid format - expected 'author' line"
);
buffer
+=
7
;
err
=
fsck_ident
(
&
buffer
,
&
commit
->
object
,
error_func
);
if
(
err
)
return
err
;
if
(
memcmp
(
buffer
,
"committer "
,
strlen
(
"committer "
)))
return
error_func
(
&
commit
->
object
,
FSCK_ERROR
,
"invalid format - expected 'committer' line"
);
buffer
+=
strlen
(
"committer "
);
err
=
fsck_ident
(
&
buffer
,
&
commit
->
object
,
error_func
);
if
(
err
)
return
err
;
if
(
*
buffer
!=
'\n'
)
return
error_func
(
&
commit
->
object
,
FSCK_ERROR
,
"invalid format - expected blank line"
);
if
(
!
commit
->
tree
)
return
error_func
(
&
commit
->
object
,
FSCK_ERROR
,
"could not load commit's tree %s"
,
sha1_to_hex
(
tree_sha1
));
...
...
t/t1450-fsck.sh
浏览文件 @
4cbf42e1
...
...
@@ -57,6 +57,34 @@ test_expect_success 'branch pointing to non-commit' '
git update-ref -d refs/heads/invalid
'
new
=
nothing
test_expect_success
'email without @ is okay'
'
git cat-file commit HEAD >basis &&
sed "s/@/AT/" basis >okay &&
new=$(git hash-object -t commit -w --stdin <okay) &&
echo "$new" &&
git update-ref refs/heads/bogus "$new" &&
git fsck 2>out &&
cat out &&
! grep "error in commit $new" out
'
git update-ref
-d
refs/heads/bogus
rm
-f
".git/objects/
$new
"
new
=
nothing
test_expect_success
'email with embedded > is not okay'
'
git cat-file commit HEAD >basis &&
sed "s/@[a-z]/&>/" basis >bad-email &&
new=$(git hash-object -t commit -w --stdin <bad-email) &&
echo "$new" &&
git update-ref refs/heads/bogus "$new" &&
git fsck 2>out &&
cat out &&
grep "error in commit $new" out
'
git update-ref
-d
refs/heads/bogus
rm
-f
".git/objects/
$new
"
cat
>
invalid-tag
<<
EOF
object ffffffffffffffffffffffffffffffffffffffff
type commit
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录