Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
6f761137
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
6f761137
编写于
8月 02, 2012
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[GSUB/GPOS] Check array size before accessing digests
上级
22148b8c
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
19 addition
and
16 deletion
+19
-16
src/hb-ot-layout-private.hh
src/hb-ot-layout-private.hh
+3
-0
src/hb-ot-layout.cc
src/hb-ot-layout.cc
+16
-16
未找到文件。
src/hb-ot-layout-private.hh
浏览文件 @
6f761137
...
...
@@ -170,6 +170,9 @@ struct hb_ot_layout_t
const
struct
GSUB
*
gsub
;
const
struct
GPOS
*
gpos
;
unsigned
int
gsub_lookup_count
;
unsigned
int
gpos_lookup_count
;
hb_set_digest_t
*
gsub_digests
;
hb_set_digest_t
*
gpos_digests
;
};
...
...
src/hb-ot-layout.cc
浏览文件 @
6f761137
...
...
@@ -58,22 +58,22 @@ _hb_ot_layout_create (hb_face_t *face)
layout
->
gpos_blob
=
Sanitizer
<
GPOS
>::
sanitize
(
hb_face_reference_table
(
face
,
HB_OT_TAG_GPOS
));
layout
->
gpos
=
Sanitizer
<
GPOS
>::
lock_instance
(
layout
->
gpos_blob
);
layout
->
gsub_lookup_count
=
layout
->
gsub
->
get_lookup_count
();
layout
->
gpos_lookup_count
=
layout
->
gpos
->
get_lookup_count
();
layout
->
gsub_digests
=
(
hb_set_digest_t
*
)
calloc
(
layout
->
gsub
->
get_lookup_count
(),
sizeof
(
hb_set_digest_t
));
layout
->
gpos_digests
=
(
hb_set_digest_t
*
)
calloc
(
layout
->
gpos
->
get_lookup_count
(),
sizeof
(
hb_set_digest_t
));
if
(
unlikely
((
layout
->
gsub
->
get_lookup_count
()
&&
!
layout
->
gsub_digests
)
||
(
layout
->
gpos
->
get_lookup_count
()
&&
!
layout
->
gpos_digests
)))
if
(
unlikely
((
layout
->
gsub
_lookup_count
&&
!
layout
->
gsub_digests
)
||
(
layout
->
gpos
_lookup_count
&&
!
layout
->
gpos_digests
)))
{
_hb_ot_layout_destroy
(
layout
);
return
NULL
;
}
unsigned
int
count
;
count
=
layout
->
gsub
->
get_lookup_count
();
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
layout
->
gsub_lookup_count
;
i
++
)
layout
->
gsub
->
add_coverage
(
&
layout
->
gsub_digests
[
i
],
i
);
count
=
layout
->
gpos
->
get_lookup_count
();
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
layout
->
gpos_lookup_count
;
i
++
)
layout
->
gpos
->
add_coverage
(
&
layout
->
gpos_digests
[
i
],
i
);
return
layout
;
...
...
@@ -405,9 +405,8 @@ hb_ot_layout_would_substitute_lookup (hb_face_t *face,
unsigned
int
glyphs_length
,
unsigned
int
lookup_index
)
{
if
(
unlikely
(
glyphs_length
<
1
||
glyphs_length
>
2
))
return
false
;
hb_would_apply_context_t
c
(
face
,
glyphs
[
0
],
glyphs_length
==
2
?
glyphs
[
1
]
:
-
1
,
NULL
);
return
_get_gsub
(
face
).
would_substitute_lookup
(
&
c
,
lookup_index
);
if
(
unlikely
(
!
hb_ot_shaper_face_data_ensure
(
face
)))
return
false
;
return
hb_ot_layout_would_substitute_lookup_fast
(
face
,
glyphs
,
glyphs_length
,
lookup_index
);
}
hb_bool_t
...
...
@@ -417,6 +416,7 @@ hb_ot_layout_would_substitute_lookup_fast (hb_face_t *face,
unsigned
int
lookup_index
)
{
if
(
unlikely
(
glyphs_length
<
1
||
glyphs_length
>
2
))
return
false
;
if
(
unlikely
(
lookup_index
>=
hb_ot_layout_from_face
(
face
)
->
gsub_lookup_count
))
return
false
;
hb_would_apply_context_t
c
(
face
,
glyphs
[
0
],
glyphs_length
==
2
?
glyphs
[
1
]
:
-
1
,
&
hb_ot_layout_from_face
(
face
)
->
gsub_digests
[
lookup_index
]);
return
hb_ot_layout_from_face
(
face
)
->
gsub
->
would_substitute_lookup
(
&
c
,
lookup_index
);
}
...
...
@@ -433,8 +433,8 @@ hb_ot_layout_substitute_lookup (hb_face_t *face,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
{
hb_apply_context_t
c
(
NULL
,
face
,
buffer
,
mask
,
NULL
)
;
return
_get_gsub
(
face
).
substitute_lookup
(
&
c
,
lookup_index
);
if
(
unlikely
(
!
hb_ot_shaper_face_data_ensure
(
face
)))
return
false
;
return
hb_ot_layout_substitute_lookup_fast
(
face
,
buffer
,
lookup_index
,
mask
);
}
hb_bool_t
...
...
@@ -443,6 +443,7 @@ hb_ot_layout_substitute_lookup_fast (hb_face_t *face,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
{
if
(
unlikely
(
lookup_index
>=
hb_ot_layout_from_face
(
face
)
->
gsub_lookup_count
))
return
false
;
hb_apply_context_t
c
(
NULL
,
face
,
buffer
,
mask
,
&
hb_ot_layout_from_face
(
face
)
->
gsub_digests
[
lookup_index
]);
return
hb_ot_layout_from_face
(
face
)
->
gsub
->
substitute_lookup
(
&
c
,
lookup_index
);
}
...
...
@@ -484,8 +485,8 @@ hb_ot_layout_position_lookup (hb_font_t *font,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
{
hb_apply_context_t
c
(
font
,
font
->
face
,
buffer
,
mask
,
NULL
)
;
return
_get_gpos
(
font
->
face
).
position_lookup
(
&
c
,
lookup_index
);
if
(
unlikely
(
!
hb_ot_shaper_face_data_ensure
(
font
->
face
)))
return
false
;
return
hb_ot_layout_position_lookup_fast
(
font
,
buffer
,
lookup_index
,
mask
);
}
hb_bool_t
...
...
@@ -494,6 +495,7 @@ hb_ot_layout_position_lookup_fast (hb_font_t *font,
unsigned
int
lookup_index
,
hb_mask_t
mask
)
{
if
(
unlikely
(
lookup_index
>=
hb_ot_layout_from_face
(
font
->
face
)
->
gpos_lookup_count
))
return
false
;
hb_apply_context_t
c
(
font
,
font
->
face
,
buffer
,
mask
,
&
hb_ot_layout_from_face
(
font
->
face
)
->
gpos_digests
[
lookup_index
]);
return
hb_ot_layout_from_face
(
font
->
face
)
->
gpos
->
position_lookup
(
&
c
,
lookup_index
);
}
...
...
@@ -503,5 +505,3 @@ hb_ot_layout_position_finish (hb_font_t *font, hb_buffer_t *buffer, hb_bool_t ze
{
GPOS
::
position_finish
(
font
,
buffer
,
zero_width_attached_marks
);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录