Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Zlib
提交
7d54c694
T
Third Party Zlib
项目概览
OpenHarmony
/
Third Party Zlib
接近 2 年 前同步成功
通知
18
Star
112
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Zlib
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
7d54c694
编写于
4月 26, 2014
作者:
M
Mark Adler
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix uncompress() to work on lengths more than a maximum unsigned.
上级
f898bbed
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
20 deletion
+41
-20
uncompr.c
uncompr.c
+41
-20
未找到文件。
uncompr.c
浏览文件 @
7d54c694
/* uncompr.c -- decompress a memory buffer
* Copyright (C) 1995-2003, 2010
Jean-loup Gailly.
* Copyright (C) 1995-2003, 2010
, 2014 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
...
...
@@ -19,7 +19,8 @@
uncompress returns Z_OK if success, Z_MEM_ERROR if there was not
enough memory, Z_BUF_ERROR if there was not enough room in the output
buffer, or Z_DATA_ERROR if the input data was corrupted.
buffer, or Z_DATA_ERROR if the input data was corrupted, including if the
input data is an incomplete zlib stream.
*/
int
ZEXPORT
uncompress
(
dest
,
destLen
,
source
,
sourceLen
)
Bytef
*
dest
;
...
...
@@ -29,31 +30,51 @@ int ZEXPORT uncompress (dest, destLen, source, sourceLen)
{
z_stream
stream
;
int
err
;
const
uInt
max
=
-
1
;
uLong
left
;
Byte
buf
[
1
];
/* for detection of incomplete stream when *destLen == 0 */
stream
.
next_in
=
(
z_const
Bytef
*
)
source
;
stream
.
avail_in
=
(
uInt
)
source
Len
;
/* Check for source > 64K on 16-bit machine: */
if
((
uLong
)
stream
.
avail_in
!=
sourceLen
)
return
Z_BUF_ERROR
;
stream
.
next_out
=
dest
;
stream
.
avail_out
=
(
uInt
)
*
destLen
;
if
((
uLong
)
stream
.
avail_out
!=
*
destLen
)
return
Z_BUF_ERROR
;
if
(
*
destLen
)
{
left
=
*
dest
Len
;
*
destLen
=
0
;
}
else
{
left
=
1
;
dest
=
buf
;
}
stream
.
next_in
=
(
z_const
Bytef
*
)
source
;
stream
.
avail_in
=
0
;
stream
.
zalloc
=
(
alloc_func
)
0
;
stream
.
zfree
=
(
free_func
)
0
;
stream
.
opaque
=
(
voidpf
)
0
;
err
=
inflateInit
(
&
stream
);
if
(
err
!=
Z_OK
)
return
err
;
err
=
inflate
(
&
stream
,
Z_FINISH
);
if
(
err
!=
Z_STREAM_END
)
{
inflateEnd
(
&
stream
);
if
(
err
==
Z_NEED_DICT
||
(
err
==
Z_BUF_ERROR
&&
stream
.
avail_in
==
0
))
return
Z_DATA_ERROR
;
return
err
;
}
*
destLen
=
stream
.
total_out
;
stream
.
next_out
=
dest
;
stream
.
avail_out
=
0
;
do
{
if
(
stream
.
avail_out
==
0
)
{
stream
.
avail_out
=
left
>
(
uLong
)
max
?
max
:
(
uInt
)
left
;
left
-=
stream
.
avail_out
;
}
if
(
stream
.
avail_in
==
0
)
{
stream
.
avail_in
=
sourceLen
>
(
uLong
)
max
?
max
:
(
uInt
)
sourceLen
;
sourceLen
-=
stream
.
avail_in
;
}
err
=
inflate
(
&
stream
,
Z_NO_FLUSH
);
}
while
(
err
==
Z_OK
);
if
(
dest
!=
buf
)
*
destLen
=
stream
.
total_out
;
else
if
(
stream
.
total_out
&&
err
==
Z_BUF_ERROR
)
left
=
1
;
err
=
inflateEnd
(
&
stream
);
return
err
;
inflateEnd
(
&
stream
);
return
err
==
Z_STREAM_END
?
Z_OK
:
err
==
Z_NEED_DICT
?
Z_DATA_ERROR
:
err
==
Z_BUF_ERROR
&&
left
+
stream
.
avail_out
?
Z_DATA_ERROR
:
err
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录