Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
3a43603e
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
1 年多 前同步成功
通知
0
Star
18
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Harfbuzz
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
3a43603e
编写于
5月 20, 2019
作者:
R
Rod Sheeter
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[subset] Fix memory leak caused by failure to cleanup glyf accelerator
上级
5cedda5e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
26 addition
and
16 deletion
+26
-16
src/hb-ot-glyf-table.hh
src/hb-ot-glyf-table.hh
+26
-16
未找到文件。
src/hb-ot-glyf-table.hh
浏览文件 @
3a43603e
...
...
@@ -148,39 +148,49 @@ struct glyf
glyf
*
glyf_prime
=
c
->
serializer
->
start_embed
<
glyf
>
();
if
(
unlikely
(
!
glyf_prime
))
return_trace
(
false
);
OT
::
glyf
::
accelerator_t
glyf
;
glyf
.
init
(
c
->
plan
->
source
);
// Byte region(s) per glyph to output
// unpadded, hints removed if so requested
// If we fail to process a glyph we produce an empty (0-length) glyph
hb_vector_t
<
SubsetGlyph
>
glyphs
;
+
hb_range
(
c
->
plan
->
num_output_glyphs
())
_populate_subset_glyphs
(
c
->
plan
,
&
glyphs
);
glyf_prime
->
serialize
(
c
->
serializer
,
hb_iter
(
glyphs
),
c
->
plan
);
hb_vector_t
<
unsigned
int
>
padded_offsets
;
+
hb_iter
(
glyphs
)
|
hb_map
([
&
]
(
const
SubsetGlyph
&
_
)
{
return
_
.
padded_size
();
})
|
hb_sink
(
padded_offsets
);
_add_loca_and_head
(
c
->
plan
,
hb_iter
(
padded_offsets
));
return_trace
(
true
);
}
template
<
typename
SubsetGlyph
>
void
_populate_subset_glyphs
(
const
hb_subset_plan_t
*
plan
,
hb_vector_t
<
SubsetGlyph
>
*
glyphs
/* OUT */
)
const
{
OT
::
glyf
::
accelerator_t
glyf
;
glyf
.
init
(
plan
->
source
);
+
hb_range
(
plan
->
num_output_glyphs
())
|
hb_map
([
&
]
(
hb_codepoint_t
new_gid
)
{
SubsetGlyph
subset_glyph
;
subset_glyph
.
new_gid
=
new_gid
;
// should never fail: all old gids should be mapped
if
(
!
c
->
plan
->
old_gid_for_new_gid
(
new_gid
,
&
subset_glyph
.
old_gid
))
return
subset_glyph
;
if
(
!
plan
->
old_gid_for_new_gid
(
new_gid
,
&
subset_glyph
.
old_gid
))
return
subset_glyph
;
subset_glyph
.
source_glyph
=
glyf
.
bytes_for_glyph
((
const
char
*
)
this
,
subset_glyph
.
old_gid
);
if
(
c
->
plan
->
drop_hints
)
subset_glyph
.
drop_hints
(
glyf
);
if
(
plan
->
drop_hints
)
subset_glyph
.
drop_hints
(
glyf
);
else
subset_glyph
.
dest_start
=
subset_glyph
.
source_glyph
;
return
subset_glyph
;
})
|
hb_sink
(
glyphs
);
glyf_prime
->
serialize
(
c
->
serializer
,
hb_iter
(
glyphs
),
c
->
plan
);
hb_vector_t
<
unsigned
int
>
padded_offsets
;
+
hb_iter
(
glyphs
)
|
hb_map
([
&
]
(
const
SubsetGlyph
&
_
)
{
return
_
.
padded_size
();
})
|
hb_sink
(
padded_offsets
);
_add_loca_and_head
(
c
->
plan
,
hb_iter
(
padded_offsets
));
return_trace
(
true
);
glyf
.
fini
();
}
static
void
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录