Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
git
提交
b308bf18
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,发现更多精彩内容 >>
提交
b308bf18
编写于
2月 10, 2011
作者:
J
Junio C Hamano
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'maint'
* maint: compat: helper for detecting unsigned overflow
上级
1a9fe453
1368f650
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
11 addition
and
4 deletion
+11
-4
git-compat-util.h
git-compat-util.h
+6
-0
patch-delta.c
patch-delta.c
+1
-1
strbuf.c
strbuf.c
+3
-2
wrapper.c
wrapper.c
+1
-1
未找到文件。
git-compat-util.h
浏览文件 @
b308bf18
...
...
@@ -31,6 +31,9 @@
#define maximum_signed_value_of_type(a) \
(INTMAX_MAX >> (bitsizeof(intmax_t) - bitsizeof(a)))
#define maximum_unsigned_value_of_type(a) \
(UINTMAX_MAX >> (bitsizeof(uintmax_t) - bitsizeof(a)))
/*
* Signed integer overflow is undefined in C, so here's a helper macro
* to detect if the sum of two integers will overflow.
...
...
@@ -40,6 +43,9 @@
#define signed_add_overflows(a, b) \
((b) > maximum_signed_value_of_type(a) - (a))
#define unsigned_add_overflows(a, b) \
((b) > maximum_unsigned_value_of_type(a) - (a))
#ifdef __GNUC__
#define TYPEOF(x) (__typeof__(x))
#else
...
...
patch-delta.c
浏览文件 @
b308bf18
...
...
@@ -48,7 +48,7 @@ void *patch_delta(const void *src_buf, unsigned long src_size,
if
(
cmd
&
0x20
)
cp_size
|=
(
*
data
++
<<
8
);
if
(
cmd
&
0x40
)
cp_size
|=
(
*
data
++
<<
16
);
if
(
cp_size
==
0
)
cp_size
=
0x10000
;
if
(
cp_off
+
cp_size
<
cp_size
||
if
(
unsigned_add_overflows
(
cp_off
,
cp_size
)
||
cp_off
+
cp_size
>
src_size
||
cp_size
>
size
)
break
;
...
...
strbuf.c
浏览文件 @
b308bf18
...
...
@@ -63,7 +63,8 @@ void strbuf_attach(struct strbuf *sb, void *buf, size_t len, size_t alloc)
void
strbuf_grow
(
struct
strbuf
*
sb
,
size_t
extra
)
{
if
(
sb
->
len
+
extra
+
1
<=
sb
->
len
)
if
(
unsigned_add_overflows
(
extra
,
1
)
||
unsigned_add_overflows
(
sb
->
len
,
extra
+
1
))
die
(
"you want to use way too much memory"
);
if
(
!
sb
->
alloc
)
sb
->
buf
=
NULL
;
...
...
@@ -152,7 +153,7 @@ int strbuf_cmp(const struct strbuf *a, const struct strbuf *b)
void
strbuf_splice
(
struct
strbuf
*
sb
,
size_t
pos
,
size_t
len
,
const
void
*
data
,
size_t
dlen
)
{
if
(
pos
+
len
<
pos
)
if
(
unsigned_add_overflows
(
pos
,
len
)
)
die
(
"you want to use way too much memory"
);
if
(
pos
>
sb
->
len
)
die
(
"`pos' is too far after the end of the buffer"
);
...
...
wrapper.c
浏览文件 @
b308bf18
...
...
@@ -53,7 +53,7 @@ void *xmalloc(size_t size)
void
*
xmallocz
(
size_t
size
)
{
void
*
ret
;
if
(
size
+
1
<
size
)
if
(
unsigned_add_overflows
(
size
,
1
)
)
die
(
"Data too large to fit into virtual memory space."
);
ret
=
xmalloc
(
size
+
1
);
((
char
*
)
ret
)[
size
]
=
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录