Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Harfbuzz
提交
0ab8c862
T
Third Party Harfbuzz
项目概览
OpenHarmony
/
Third Party Harfbuzz
接近 2 年 前同步成功
通知
1
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看板
提交
0ab8c862
编写于
5月 11, 2012
作者:
B
Behdad Esfahbod
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Annotate SANITIZE return values
More to come, for APPLY, CLOSURE, etc.
上级
829e814f
变更
13
隐藏空白更改
内联
并排
Showing
13 changed file
with
299 addition
and
316 deletion
+299
-316
src/hb-open-file-private.hh
src/hb-open-file-private.hh
+12
-11
src/hb-open-type-private.hh
src/hb-open-type-private.hh
+25
-24
src/hb-ot-head-table.hh
src/hb-ot-head-table.hh
+3
-1
src/hb-ot-hhea-table.hh
src/hb-ot-hhea-table.hh
+2
-2
src/hb-ot-hmtx-table.hh
src/hb-ot-hmtx-table.hh
+2
-2
src/hb-ot-layout-common-private.hh
src/hb-ot-layout-common-private.hh
+22
-29
src/hb-ot-layout-gdef-table.hh
src/hb-ot-layout-gdef-table.hh
+23
-25
src/hb-ot-layout-gpos-table.hh
src/hb-ot-layout-gpos-table.hh
+80
-100
src/hb-ot-layout-gsub-table.hh
src/hb-ot-layout-gsub-table.hh
+47
-54
src/hb-ot-layout-gsubgpos-private.hh
src/hb-ot-layout-gsubgpos-private.hh
+41
-47
src/hb-ot-maxp-table.hh
src/hb-ot-maxp-table.hh
+3
-4
src/hb-ot-name-table.hh
src/hb-ot-name-table.hh
+8
-9
src/hb-private.hh
src/hb-private.hh
+31
-8
未找到文件。
src/hb-open-file-private.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2012 Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -22,6 +23,7 @@
...
@@ -22,6 +23,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
*
* Red Hat Author(s): Behdad Esfahbod
* Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
*/
#ifndef HB_OPEN_FILE_PRIVATE_HH
#ifndef HB_OPEN_FILE_PRIVATE_HH
...
@@ -51,7 +53,7 @@ typedef struct TableRecord
...
@@ -51,7 +53,7 @@ typedef struct TableRecord
{
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
Tag
tag
;
/* 4-byte identifier. */
Tag
tag
;
/* 4-byte identifier. */
...
@@ -100,8 +102,7 @@ typedef struct OffsetTable
...
@@ -100,8 +102,7 @@ typedef struct OffsetTable
public:
public:
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
c
->
check_array
(
tables
,
TableRecord
::
static_size
,
numTables
));
&&
c
->
check_array
(
tables
,
TableRecord
::
static_size
,
numTables
);
}
}
private:
private:
...
@@ -129,7 +130,7 @@ struct TTCHeaderVersion1
...
@@ -129,7 +130,7 @@ struct TTCHeaderVersion1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
table
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
table
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -168,11 +169,11 @@ struct TTCHeader
...
@@ -168,11 +169,11 @@ struct TTCHeader
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
u
.
header
.
version
.
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
u
.
header
.
version
.
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
header
.
version
.
major
)
{
switch
(
u
.
header
.
version
.
major
)
{
case
2
:
/* version 2 is compatible with version 1 */
case
2
:
/* version 2 is compatible with version 1 */
case
1
:
return
u
.
version1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
version1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -230,14 +231,14 @@ struct OpenTypeFontFile
...
@@ -230,14 +231,14 @@ struct OpenTypeFontFile
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
u
.
tag
.
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
u
.
tag
.
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
tag
)
{
switch
(
u
.
tag
)
{
case
CFFTag
:
/* All the non-collection tags */
case
CFFTag
:
/* All the non-collection tags */
case
TrueTag
:
case
TrueTag
:
case
Typ1Tag
:
case
Typ1Tag
:
case
TrueTypeTag
:
return
u
.
fontFace
.
sanitize
(
c
);
case
TrueTypeTag
:
return
TRACE_RETURN
(
u
.
fontFace
.
sanitize
(
c
)
);
case
TTCTag
:
return
u
.
ttcHeader
.
sanitize
(
c
);
case
TTCTag
:
return
TRACE_RETURN
(
u
.
ttcHeader
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
...
src/hb-open-type-private.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2007,2008,2009,2010 Red Hat, Inc.
* Copyright © 2007,2008,2009,2010 Red Hat, Inc.
* Copyright © 2012 Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -22,6 +23,7 @@
...
@@ -22,6 +23,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
*
* Red Hat Author(s): Behdad Esfahbod
* Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
*/
#ifndef HB_OPEN_TYPE_PRIVATE_HH
#ifndef HB_OPEN_TYPE_PRIVATE_HH
...
@@ -153,7 +155,7 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
...
@@ -153,7 +155,7 @@ ASSERT_STATIC (Type::min_size + 1 <= sizeof (_Null##Type))
#define TRACE_SANITIZE() \
#define TRACE_SANITIZE() \
hb_auto_trace_t<HB_DEBUG_SANITIZE
, unsigned int
> trace (&c->debug_depth, "SANITIZE", this, HB_FUNC, "");
hb_auto_trace_t<HB_DEBUG_SANITIZE> trace (&c->debug_depth, "SANITIZE", this, HB_FUNC, "");
struct
hb_sanitize_context_t
struct
hb_sanitize_context_t
...
@@ -371,7 +373,7 @@ struct IntType
...
@@ -371,7 +373,7 @@ struct IntType
inline
int
cmp
(
Type
a
)
const
{
Type
b
=
v
;
return
a
<
b
?
-
1
:
a
==
b
?
0
:
+
1
;
}
inline
int
cmp
(
Type
a
)
const
{
Type
b
=
v
;
return
a
<
b
?
-
1
:
a
==
b
?
0
:
+
1
;
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
likely
(
c
->
check_struct
(
this
));
return
TRACE_RETURN
(
likely
(
c
->
check_struct
(
this
)
));
}
}
protected:
protected:
BEInt
<
Type
,
sizeof
(
Type
)
>
v
;
BEInt
<
Type
,
sizeof
(
Type
)
>
v
;
...
@@ -401,7 +403,7 @@ struct LONGDATETIME
...
@@ -401,7 +403,7 @@ struct LONGDATETIME
{
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
likely
(
c
->
check_struct
(
this
));
return
TRACE_RETURN
(
likely
(
c
->
check_struct
(
this
)
));
}
}
private:
private:
LONG
major
;
LONG
major
;
...
@@ -465,7 +467,7 @@ struct FixedVersion
...
@@ -465,7 +467,7 @@ struct FixedVersion
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
USHORT
major
;
USHORT
major
;
...
@@ -493,20 +495,20 @@ struct GenericOffsetTo : OffsetType
...
@@ -493,20 +495,20 @@ struct GenericOffsetTo : OffsetType
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
c
->
check_struct
(
this
)))
return
false
;
if
(
unlikely
(
!
c
->
check_struct
(
this
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
offset
=
*
this
;
unsigned
int
offset
=
*
this
;
if
(
unlikely
(
!
offset
))
return
true
;
if
(
unlikely
(
!
offset
))
return
TRACE_RETURN
(
true
)
;
Type
&
obj
=
StructAtOffset
<
Type
>
(
base
,
offset
);
Type
&
obj
=
StructAtOffset
<
Type
>
(
base
,
offset
);
return
likely
(
obj
.
sanitize
(
c
))
||
neuter
(
c
);
return
TRACE_RETURN
(
likely
(
obj
.
sanitize
(
c
))
||
neuter
(
c
)
);
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
,
T
user_data
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
,
T
user_data
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
c
->
check_struct
(
this
)))
return
false
;
if
(
unlikely
(
!
c
->
check_struct
(
this
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
offset
=
*
this
;
unsigned
int
offset
=
*
this
;
if
(
unlikely
(
!
offset
))
return
true
;
if
(
unlikely
(
!
offset
))
return
TRACE_RETURN
(
true
)
;
Type
&
obj
=
StructAtOffset
<
Type
>
(
base
,
offset
);
Type
&
obj
=
StructAtOffset
<
Type
>
(
base
,
offset
);
return
likely
(
obj
.
sanitize
(
c
,
user_data
))
||
neuter
(
c
);
return
TRACE_RETURN
(
likely
(
obj
.
sanitize
(
c
,
user_data
))
||
neuter
(
c
)
);
}
}
private:
private:
...
@@ -558,7 +560,7 @@ struct GenericArrayOf
...
@@ -558,7 +560,7 @@ struct GenericArrayOf
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
false
;
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
TRACE_RETURN
(
false
)
;
/* Note: for structs that do not reference other structs,
/* Note: for structs that do not reference other structs,
* we do not need to call their sanitize() as we already did
* we do not need to call their sanitize() as we already did
...
@@ -569,33 +571,32 @@ struct GenericArrayOf
...
@@ -569,33 +571,32 @@ struct GenericArrayOf
*/
*/
(
void
)
(
false
&&
array
[
0
].
sanitize
(
c
));
(
void
)
(
false
&&
array
[
0
].
sanitize
(
c
));
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
false
;
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
count
=
len
;
unsigned
int
count
=
len
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
if
(
unlikely
(
!
array
[
i
].
sanitize
(
c
,
base
)))
if
(
unlikely
(
!
array
[
i
].
sanitize
(
c
,
base
)))
return
false
;
return
TRACE_RETURN
(
false
)
;
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
,
T
user_data
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
,
T
user_data
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
false
;
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
count
=
len
;
unsigned
int
count
=
len
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
if
(
unlikely
(
!
array
[
i
].
sanitize
(
c
,
base
,
user_data
)))
if
(
unlikely
(
!
array
[
i
].
sanitize
(
c
,
base
,
user_data
)))
return
false
;
return
TRACE_RETURN
(
false
)
;
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
private:
private:
inline
bool
sanitize_shallow
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize_shallow
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
c
->
check_array
(
this
,
Type
::
static_size
,
len
));
&&
c
->
check_array
(
this
,
Type
::
static_size
,
len
);
}
}
public:
public:
...
@@ -637,12 +638,12 @@ struct OffsetListOf : OffsetArrayOf<Type>
...
@@ -637,12 +638,12 @@ struct OffsetListOf : OffsetArrayOf<Type>
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
OffsetArrayOf
<
Type
>::
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
OffsetArrayOf
<
Type
>::
sanitize
(
c
,
this
)
);
}
}
template
<
typename
T
>
template
<
typename
T
>
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
T
user_data
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
T
user_data
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
OffsetArrayOf
<
Type
>::
sanitize
(
c
,
this
,
user_data
);
return
TRACE_RETURN
(
OffsetArrayOf
<
Type
>::
sanitize
(
c
,
this
,
user_data
)
);
}
}
};
};
...
@@ -667,7 +668,7 @@ struct HeadlessArrayOf
...
@@ -667,7 +668,7 @@ struct HeadlessArrayOf
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
false
;
if
(
unlikely
(
!
sanitize_shallow
(
c
)))
return
TRACE_RETURN
(
false
)
;
/* Note: for structs that do not reference other structs,
/* Note: for structs that do not reference other structs,
* we do not need to call their sanitize() as we already did
* we do not need to call their sanitize() as we already did
...
@@ -678,7 +679,7 @@ struct HeadlessArrayOf
...
@@ -678,7 +679,7 @@ struct HeadlessArrayOf
*/
*/
(
void
)
(
false
&&
array
[
0
].
sanitize
(
c
));
(
void
)
(
false
&&
array
[
0
].
sanitize
(
c
));
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
USHORT
len
;
USHORT
len
;
...
...
src/hb-ot-head-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2010 Red Hat, Inc.
* Copyright © 2010 Red Hat, Inc.
* Copyright © 2012 Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -22,6 +23,7 @@
...
@@ -22,6 +23,7 @@
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
*
* Red Hat Author(s): Behdad Esfahbod
* Red Hat Author(s): Behdad Esfahbod
* Google Author(s): Behdad Esfahbod
*/
*/
#ifndef HB_OT_HEAD_TABLE_HH
#ifndef HB_OT_HEAD_TABLE_HH
...
@@ -49,7 +51,7 @@ struct head
...
@@ -49,7 +51,7 @@ struct head
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
&&
likely
(
version
.
major
==
1
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
likely
(
version
.
major
==
1
)
);
}
}
private:
private:
...
...
src/hb-ot-hhea-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2011 Google, Inc.
* Copyright © 2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -44,7 +44,7 @@ struct hhea
...
@@ -44,7 +44,7 @@ struct hhea
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
&&
likely
(
version
.
major
==
1
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
likely
(
version
.
major
==
1
)
);
}
}
private:
private:
...
...
src/hb-ot-hmtx-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2011 Google, Inc.
* Copyright © 2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -54,7 +54,7 @@ struct hmtx
...
@@ -54,7 +54,7 @@ struct hmtx
TRACE_SANITIZE
();
TRACE_SANITIZE
();
/* We don't check for anything specific here. The users of the
/* We don't check for anything specific here. The users of the
* struct do all the hard work... */
* struct do all the hard work... */
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
private:
private:
...
...
src/hb-ot-layout-common-private.hh
浏览文件 @
0ab8c862
...
@@ -60,8 +60,7 @@ struct Record
...
@@ -60,8 +60,7 @@ struct Record
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
offset
.
sanitize
(
c
,
base
));
&&
offset
.
sanitize
(
c
,
base
);
}
}
Tag
tag
;
/* 4-byte Tag identifier */
Tag
tag
;
/* 4-byte Tag identifier */
...
@@ -115,7 +114,7 @@ struct RecordListOf : RecordArrayOf<Type>
...
@@ -115,7 +114,7 @@ struct RecordListOf : RecordArrayOf<Type>
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
RecordArrayOf
<
Type
>::
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
RecordArrayOf
<
Type
>::
sanitize
(
c
,
this
)
);
}
}
};
};
...
@@ -129,7 +128,7 @@ struct RangeRecord
...
@@ -129,7 +128,7 @@ struct RangeRecord
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
inline
bool
intersects
(
const
hb_set_t
*
glyphs
)
const
{
inline
bool
intersects
(
const
hb_set_t
*
glyphs
)
const
{
...
@@ -188,8 +187,7 @@ struct LangSys
...
@@ -188,8 +187,7 @@ struct LangSys
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
featureIndex
.
sanitize
(
c
));
&&
featureIndex
.
sanitize
(
c
);
}
}
Offset
lookupOrder
;
/* = Null (reserved for an offset to a
Offset
lookupOrder
;
/* = Null (reserved for an offset to a
...
@@ -227,8 +225,7 @@ struct Script
...
@@ -227,8 +225,7 @@ struct Script
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
defaultLangSys
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
defaultLangSys
.
sanitize
(
c
,
this
)
&&
langSys
.
sanitize
(
c
,
this
));
&&
langSys
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -258,8 +255,7 @@ struct Feature
...
@@ -258,8 +255,7 @@ struct Feature
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
lookupIndex
.
sanitize
(
c
));
&&
lookupIndex
.
sanitize
(
c
);
}
}
Offset
featureParams
;
/* Offset to Feature Parameters table (if one
Offset
featureParams
;
/* Offset to Feature Parameters table (if one
...
@@ -313,14 +309,13 @@ struct Lookup
...
@@ -313,14 +309,13 @@ struct Lookup
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
/* Real sanitize of the subtables is done by GSUB/GPOS/... */
/* Real sanitize of the subtables is done by GSUB/GPOS/... */
if
(
!
(
c
->
check_struct
(
this
)
if
(
!
(
c
->
check_struct
(
this
)
&&
subTable
.
sanitize
(
c
)))
return
TRACE_RETURN
(
false
);
&&
subTable
.
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
lookupFlag
&
LookupFlag
::
UseMarkFilteringSet
))
if
(
unlikely
(
lookupFlag
&
LookupFlag
::
UseMarkFilteringSet
))
{
{
USHORT
&
markFilteringSet
=
StructAfter
<
USHORT
>
(
subTable
);
USHORT
&
markFilteringSet
=
StructAfter
<
USHORT
>
(
subTable
);
if
(
!
markFilteringSet
.
sanitize
(
c
))
return
false
;
if
(
!
markFilteringSet
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
}
}
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
USHORT
lookupType
;
/* Different enumerations for GSUB and GPOS */
USHORT
lookupType
;
/* Different enumerations for GSUB and GPOS */
...
@@ -356,7 +351,7 @@ struct CoverageFormat1
...
@@ -356,7 +351,7 @@ struct CoverageFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
glyphArray
.
sanitize
(
c
);
return
TRACE_RETURN
(
glyphArray
.
sanitize
(
c
)
);
}
}
inline
bool
intersects_coverage
(
const
hb_set_t
*
glyphs
,
unsigned
int
index
)
const
{
inline
bool
intersects_coverage
(
const
hb_set_t
*
glyphs
,
unsigned
int
index
)
const
{
...
@@ -400,7 +395,7 @@ struct CoverageFormat2
...
@@ -400,7 +395,7 @@ struct CoverageFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
rangeRecord
.
sanitize
(
c
);
return
TRACE_RETURN
(
rangeRecord
.
sanitize
(
c
)
);
}
}
inline
bool
intersects_coverage
(
const
hb_set_t
*
glyphs
,
unsigned
int
index
)
const
{
inline
bool
intersects_coverage
(
const
hb_set_t
*
glyphs
,
unsigned
int
index
)
const
{
...
@@ -469,11 +464,11 @@ struct Coverage
...
@@ -469,11 +464,11 @@ struct Coverage
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -571,8 +566,7 @@ struct ClassDefFormat1
...
@@ -571,8 +566,7 @@ struct ClassDefFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
classValue
.
sanitize
(
c
));
&&
classValue
.
sanitize
(
c
);
}
}
inline
bool
intersects_class
(
const
hb_set_t
*
glyphs
,
unsigned
int
klass
)
const
{
inline
bool
intersects_class
(
const
hb_set_t
*
glyphs
,
unsigned
int
klass
)
const
{
...
@@ -606,7 +600,7 @@ struct ClassDefFormat2
...
@@ -606,7 +600,7 @@ struct ClassDefFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
rangeRecord
.
sanitize
(
c
);
return
TRACE_RETURN
(
rangeRecord
.
sanitize
(
c
)
);
}
}
inline
bool
intersects_class
(
const
hb_set_t
*
glyphs
,
unsigned
int
klass
)
const
{
inline
bool
intersects_class
(
const
hb_set_t
*
glyphs
,
unsigned
int
klass
)
const
{
...
@@ -640,11 +634,11 @@ struct ClassDef
...
@@ -640,11 +634,11 @@ struct ClassDef
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -724,8 +718,7 @@ struct Device
...
@@ -724,8 +718,7 @@ struct Device
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
c
->
check_range
(
this
,
this
->
get_size
()));
&&
c
->
check_range
(
this
,
this
->
get_size
());
}
}
private:
private:
...
...
src/hb-ot-layout-gdef-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2010,2011 Google, Inc.
* Copyright © 2010,2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -71,8 +71,7 @@ struct AttachList
...
@@ -71,8 +71,7 @@ struct AttachList
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
attachPoint
.
sanitize
(
c
,
this
));
&&
attachPoint
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -102,7 +101,7 @@ struct CaretValueFormat1
...
@@ -102,7 +101,7 @@ struct CaretValueFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
private:
private:
...
@@ -128,7 +127,7 @@ struct CaretValueFormat2
...
@@ -128,7 +127,7 @@ struct CaretValueFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
private:
private:
...
@@ -151,8 +150,7 @@ struct CaretValueFormat3
...
@@ -151,8 +150,7 @@ struct CaretValueFormat3
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
deviceTable
.
sanitize
(
c
,
this
));
&&
deviceTable
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -180,12 +178,12 @@ struct CaretValue
...
@@ -180,12 +178,12 @@ struct CaretValue
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
case
3
:
return
u
.
format3
.
sanitize
(
c
);
case
3
:
return
TRACE_RETURN
(
u
.
format3
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -221,7 +219,7 @@ struct LigGlyph
...
@@ -221,7 +219,7 @@ struct LigGlyph
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
carets
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
carets
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -255,8 +253,7 @@ struct LigCaretList
...
@@ -255,8 +253,7 @@ struct LigCaretList
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
ligGlyph
.
sanitize
(
c
,
this
));
&&
ligGlyph
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -278,7 +275,7 @@ struct MarkGlyphSetsFormat1
...
@@ -278,7 +275,7 @@ struct MarkGlyphSetsFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -302,10 +299,10 @@ struct MarkGlyphSets
...
@@ -302,10 +299,10 @@ struct MarkGlyphSets
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -365,12 +362,13 @@ struct GDEF
...
@@ -365,12 +362,13 @@ struct GDEF
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
version
.
sanitize
(
c
)
&&
likely
(
version
.
major
==
1
)
return
TRACE_RETURN
(
version
.
sanitize
(
c
)
&&
&&
glyphClassDef
.
sanitize
(
c
,
this
)
likely
(
version
.
major
==
1
)
&&
&&
attachList
.
sanitize
(
c
,
this
)
glyphClassDef
.
sanitize
(
c
,
this
)
&&
&&
ligCaretList
.
sanitize
(
c
,
this
)
attachList
.
sanitize
(
c
,
this
)
&&
&&
markAttachClassDef
.
sanitize
(
c
,
this
)
ligCaretList
.
sanitize
(
c
,
this
)
&&
&&
(
version
.
to_int
()
<
0x00010002
||
markGlyphSetsDef
[
0
].
sanitize
(
c
,
this
));
markAttachClassDef
.
sanitize
(
c
,
this
)
&&
(
version
.
to_int
()
<
0x00010002
||
markGlyphSetsDef
[
0
].
sanitize
(
c
,
this
)));
}
}
...
...
src/hb-ot-layout-gpos-table.hh
浏览文件 @
0ab8c862
...
@@ -171,40 +171,39 @@ struct ValueFormat : USHORT
...
@@ -171,40 +171,39 @@ struct ValueFormat : USHORT
inline
bool
sanitize_value
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
)
{
inline
bool
sanitize_value
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_range
(
values
,
get_size
())
return
TRACE_RETURN
(
c
->
check_range
(
values
,
get_size
())
&&
(
!
has_device
()
||
sanitize_value_devices
(
c
,
base
,
values
)));
&&
(
!
has_device
()
||
sanitize_value_devices
(
c
,
base
,
values
));
}
}
inline
bool
sanitize_values
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
,
unsigned
int
count
)
{
inline
bool
sanitize_values
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
,
unsigned
int
count
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
unsigned
int
len
=
get_len
();
unsigned
int
len
=
get_len
();
if
(
!
c
->
check_array
(
values
,
get_size
(),
count
))
return
false
;
if
(
!
c
->
check_array
(
values
,
get_size
(),
count
))
return
TRACE_RETURN
(
false
)
;
if
(
!
has_device
())
return
true
;
if
(
!
has_device
())
return
TRACE_RETURN
(
true
)
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
{
if
(
!
sanitize_value_devices
(
c
,
base
,
values
))
if
(
!
sanitize_value_devices
(
c
,
base
,
values
))
return
false
;
return
TRACE_RETURN
(
false
)
;
values
+=
len
;
values
+=
len
;
}
}
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
/* Just sanitize referenced Device tables. Doesn't check the values themselves. */
/* Just sanitize referenced Device tables. Doesn't check the values themselves. */
inline
bool
sanitize_values_stride_unsafe
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
,
unsigned
int
count
,
unsigned
int
stride
)
{
inline
bool
sanitize_values_stride_unsafe
(
hb_sanitize_context_t
*
c
,
void
*
base
,
Value
*
values
,
unsigned
int
count
,
unsigned
int
stride
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
has_device
())
return
true
;
if
(
!
has_device
())
return
TRACE_RETURN
(
true
)
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
{
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
{
if
(
!
sanitize_value_devices
(
c
,
base
,
values
))
if
(
!
sanitize_value_devices
(
c
,
base
,
values
))
return
false
;
return
TRACE_RETURN
(
false
)
;
values
+=
stride
;
values
+=
stride
;
}
}
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
};
};
...
@@ -223,7 +222,7 @@ struct AnchorFormat1
...
@@ -223,7 +222,7 @@ struct AnchorFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
private:
private:
...
@@ -255,7 +254,7 @@ struct AnchorFormat2
...
@@ -255,7 +254,7 @@ struct AnchorFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
private:
private:
...
@@ -286,9 +285,7 @@ struct AnchorFormat3
...
@@ -286,9 +285,7 @@ struct AnchorFormat3
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
xDeviceTable
.
sanitize
(
c
,
this
)
&&
yDeviceTable
.
sanitize
(
c
,
this
));
&&
xDeviceTable
.
sanitize
(
c
,
this
)
&&
yDeviceTable
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -323,12 +320,12 @@ struct Anchor
...
@@ -323,12 +320,12 @@ struct Anchor
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
case
3
:
return
u
.
format3
.
sanitize
(
c
);
case
3
:
return
TRACE_RETURN
(
u
.
format3
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -353,13 +350,13 @@ struct AnchorMatrix
...
@@ -353,13 +350,13 @@ struct AnchorMatrix
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
cols
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
cols
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
c
->
check_struct
(
this
))
return
false
;
if
(
!
c
->
check_struct
(
this
))
return
TRACE_RETURN
(
false
)
;
if
(
unlikely
(
rows
>
0
&&
cols
>=
((
unsigned
int
)
-
1
)
/
rows
))
return
false
;
if
(
unlikely
(
rows
>
0
&&
cols
>=
((
unsigned
int
)
-
1
)
/
rows
))
return
TRACE_RETURN
(
false
)
;
unsigned
int
count
=
rows
*
cols
;
unsigned
int
count
=
rows
*
cols
;
if
(
!
c
->
check_array
(
matrix
,
matrix
[
0
].
static_size
,
count
))
return
false
;
if
(
!
c
->
check_array
(
matrix
,
matrix
[
0
].
static_size
,
count
))
return
TRACE_RETURN
(
false
)
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
if
(
!
matrix
[
i
].
sanitize
(
c
,
this
))
return
false
;
if
(
!
matrix
[
i
].
sanitize
(
c
,
this
))
return
TRACE_RETURN
(
false
)
;
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
USHORT
rows
;
/* Number of rows */
USHORT
rows
;
/* Number of rows */
...
@@ -378,8 +375,7 @@ struct MarkRecord
...
@@ -378,8 +375,7 @@ struct MarkRecord
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
markAnchor
.
sanitize
(
c
,
base
));
&&
markAnchor
.
sanitize
(
c
,
base
);
}
}
private:
private:
...
@@ -421,7 +417,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
...
@@ -421,7 +417,7 @@ struct MarkArray : ArrayOf<MarkRecord> /* Array of MarkRecords--in Coverage orde
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
ArrayOf
<
MarkRecord
>::
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
ArrayOf
<
MarkRecord
>::
sanitize
(
c
,
this
)
);
}
}
};
};
...
@@ -449,9 +445,7 @@ struct SinglePosFormat1
...
@@ -449,9 +445,7 @@ struct SinglePosFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
coverage
.
sanitize
(
c
,
this
)
&&
valueFormat
.
sanitize_value
(
c
,
this
,
values
));
&&
coverage
.
sanitize
(
c
,
this
)
&&
valueFormat
.
sanitize_value
(
c
,
this
,
values
);
}
}
private:
private:
...
@@ -493,9 +487,7 @@ struct SinglePosFormat2
...
@@ -493,9 +487,7 @@ struct SinglePosFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
coverage
.
sanitize
(
c
,
this
)
&&
valueFormat
.
sanitize_values
(
c
,
this
,
values
,
valueCount
));
&&
coverage
.
sanitize
(
c
,
this
)
&&
valueFormat
.
sanitize_values
(
c
,
this
,
values
,
valueCount
);
}
}
private:
private:
...
@@ -529,11 +521,11 @@ struct SinglePos
...
@@ -529,11 +521,11 @@ struct SinglePos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -604,12 +596,12 @@ struct PairSet
...
@@ -604,12 +596,12 @@ struct PairSet
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
const
sanitize_closure_t
*
closure
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
const
sanitize_closure_t
*
closure
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
(
c
->
check_struct
(
this
)
if
(
!
(
c
->
check_struct
(
this
)
&&
c
->
check_array
(
array
,
USHORT
::
static_size
*
closure
->
stride
,
len
)))
return
false
;
&&
c
->
check_array
(
array
,
USHORT
::
static_size
*
closure
->
stride
,
len
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
count
=
len
;
unsigned
int
count
=
len
;
PairValueRecord
*
record
=
CastP
<
PairValueRecord
>
(
array
);
PairValueRecord
*
record
=
CastP
<
PairValueRecord
>
(
array
);
return
closure
->
valueFormats
[
0
].
sanitize_values_stride_unsafe
(
c
,
closure
->
base
,
&
record
->
values
[
0
],
count
,
closure
->
stride
)
return
TRACE_RETURN
(
closure
->
valueFormats
[
0
].
sanitize_values_stride_unsafe
(
c
,
closure
->
base
,
&
record
->
values
[
0
],
count
,
closure
->
stride
)
&&
closure
->
valueFormats
[
1
].
sanitize_values_stride_unsafe
(
c
,
closure
->
base
,
&
record
->
values
[
closure
->
len1
],
count
,
closure
->
stride
);
&&
closure
->
valueFormats
[
1
].
sanitize_values_stride_unsafe
(
c
,
closure
->
base
,
&
record
->
values
[
closure
->
len1
],
count
,
closure
->
stride
)
);
}
}
private:
private:
...
@@ -654,9 +646,7 @@ struct PairPosFormat1
...
@@ -654,9 +646,7 @@ struct PairPosFormat1
1
+
len1
+
len2
1
+
len1
+
len2
};
};
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
coverage
.
sanitize
(
c
,
this
)
&&
pairSet
.
sanitize
(
c
,
this
,
&
closure
));
&&
coverage
.
sanitize
(
c
,
this
)
&&
pairSet
.
sanitize
(
c
,
this
,
&
closure
);
}
}
private:
private:
...
@@ -723,16 +713,16 @@ struct PairPosFormat2
...
@@ -723,16 +713,16 @@ struct PairPosFormat2
if
(
!
(
c
->
check_struct
(
this
)
if
(
!
(
c
->
check_struct
(
this
)
&&
coverage
.
sanitize
(
c
,
this
)
&&
coverage
.
sanitize
(
c
,
this
)
&&
classDef1
.
sanitize
(
c
,
this
)
&&
classDef1
.
sanitize
(
c
,
this
)
&&
classDef2
.
sanitize
(
c
,
this
)))
return
false
;
&&
classDef2
.
sanitize
(
c
,
this
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
len1
=
valueFormat1
.
get_len
();
unsigned
int
len1
=
valueFormat1
.
get_len
();
unsigned
int
len2
=
valueFormat2
.
get_len
();
unsigned
int
len2
=
valueFormat2
.
get_len
();
unsigned
int
stride
=
len1
+
len2
;
unsigned
int
stride
=
len1
+
len2
;
unsigned
int
record_size
=
valueFormat1
.
get_size
()
+
valueFormat2
.
get_size
();
unsigned
int
record_size
=
valueFormat1
.
get_size
()
+
valueFormat2
.
get_size
();
unsigned
int
count
=
(
unsigned
int
)
class1Count
*
(
unsigned
int
)
class2Count
;
unsigned
int
count
=
(
unsigned
int
)
class1Count
*
(
unsigned
int
)
class2Count
;
return
c
->
check_array
(
values
,
record_size
,
count
)
&&
return
TRACE_RETURN
(
c
->
check_array
(
values
,
record_size
,
count
)
&&
valueFormat1
.
sanitize_values_stride_unsafe
(
c
,
this
,
&
values
[
0
],
count
,
stride
)
&&
valueFormat1
.
sanitize_values_stride_unsafe
(
c
,
this
,
&
values
[
0
],
count
,
stride
)
&&
valueFormat2
.
sanitize_values_stride_unsafe
(
c
,
this
,
&
values
[
len1
],
count
,
stride
);
valueFormat2
.
sanitize_values_stride_unsafe
(
c
,
this
,
&
values
[
len1
],
count
,
stride
)
);
}
}
private:
private:
...
@@ -782,11 +772,11 @@ struct PairPos
...
@@ -782,11 +772,11 @@ struct PairPos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -805,8 +795,7 @@ struct EntryExitRecord
...
@@ -805,8 +795,7 @@ struct EntryExitRecord
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
entryAnchor
.
sanitize
(
c
,
base
)
return
TRACE_RETURN
(
entryAnchor
.
sanitize
(
c
,
base
)
&&
exitAnchor
.
sanitize
(
c
,
base
));
&&
exitAnchor
.
sanitize
(
c
,
base
);
}
}
private:
private:
...
@@ -916,8 +905,7 @@ struct CursivePosFormat1
...
@@ -916,8 +905,7 @@ struct CursivePosFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
entryExitRecord
.
sanitize
(
c
,
this
));
&&
entryExitRecord
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -948,10 +936,10 @@ struct CursivePos
...
@@ -948,10 +936,10 @@ struct CursivePos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -999,11 +987,8 @@ struct MarkBasePosFormat1
...
@@ -999,11 +987,8 @@ struct MarkBasePosFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
markCoverage
.
sanitize
(
c
,
this
)
&&
baseCoverage
.
sanitize
(
c
,
this
)
&&
&&
markCoverage
.
sanitize
(
c
,
this
)
markArray
.
sanitize
(
c
,
this
)
&&
baseArray
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
));
&&
baseCoverage
.
sanitize
(
c
,
this
)
&&
markArray
.
sanitize
(
c
,
this
)
&&
baseArray
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
);
}
}
private:
private:
...
@@ -1041,10 +1026,10 @@ struct MarkBasePos
...
@@ -1041,10 +1026,10 @@ struct MarkBasePos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1121,11 +1106,8 @@ struct MarkLigPosFormat1
...
@@ -1121,11 +1106,8 @@ struct MarkLigPosFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
markCoverage
.
sanitize
(
c
,
this
)
&&
ligatureCoverage
.
sanitize
(
c
,
this
)
&&
&&
markCoverage
.
sanitize
(
c
,
this
)
markArray
.
sanitize
(
c
,
this
)
&&
ligatureArray
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
));
&&
ligatureCoverage
.
sanitize
(
c
,
this
)
&&
markArray
.
sanitize
(
c
,
this
)
&&
ligatureArray
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
);
}
}
private:
private:
...
@@ -1164,10 +1146,10 @@ struct MarkLigPos
...
@@ -1164,10 +1146,10 @@ struct MarkLigPos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1224,11 +1206,9 @@ struct MarkMarkPosFormat1
...
@@ -1224,11 +1206,9 @@ struct MarkMarkPosFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
mark1Coverage
.
sanitize
(
c
,
this
)
&&
&&
mark1Coverage
.
sanitize
(
c
,
this
)
mark2Coverage
.
sanitize
(
c
,
this
)
&&
mark1Array
.
sanitize
(
c
,
this
)
&&
mark2Coverage
.
sanitize
(
c
,
this
)
&&
mark2Array
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
));
&&
mark1Array
.
sanitize
(
c
,
this
)
&&
mark2Array
.
sanitize
(
c
,
this
,
(
unsigned
int
)
classCount
);
}
}
private:
private:
...
@@ -1268,10 +1248,10 @@ struct MarkMarkPos
...
@@ -1268,10 +1248,10 @@ struct MarkMarkPos
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1363,23 +1343,23 @@ struct PosLookupSubTable
...
@@ -1363,23 +1343,23 @@ struct PosLookupSubTable
case
Context
:
return
u
.
c
.
apply
(
c
);
case
Context
:
return
u
.
c
.
apply
(
c
);
case
ChainContext
:
return
u
.
chainContext
.
apply
(
c
);
case
ChainContext
:
return
u
.
chainContext
.
apply
(
c
);
case
Extension
:
return
u
.
extension
.
apply
(
c
);
case
Extension
:
return
u
.
extension
.
apply
(
c
);
default:
return
false
;
default:
return
false
;
}
}
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
lookup_type
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
lookup_type
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
switch
(
lookup_type
)
{
switch
(
lookup_type
)
{
case
Single
:
return
u
.
single
.
sanitize
(
c
);
case
Single
:
return
TRACE_RETURN
(
u
.
single
.
sanitize
(
c
)
);
case
Pair
:
return
u
.
pair
.
sanitize
(
c
);
case
Pair
:
return
TRACE_RETURN
(
u
.
pair
.
sanitize
(
c
)
);
case
Cursive
:
return
u
.
cursive
.
sanitize
(
c
);
case
Cursive
:
return
TRACE_RETURN
(
u
.
cursive
.
sanitize
(
c
)
);
case
MarkBase
:
return
u
.
markBase
.
sanitize
(
c
);
case
MarkBase
:
return
TRACE_RETURN
(
u
.
markBase
.
sanitize
(
c
)
);
case
MarkLig
:
return
u
.
markLig
.
sanitize
(
c
);
case
MarkLig
:
return
TRACE_RETURN
(
u
.
markLig
.
sanitize
(
c
)
);
case
MarkMark
:
return
u
.
markMark
.
sanitize
(
c
);
case
MarkMark
:
return
TRACE_RETURN
(
u
.
markMark
.
sanitize
(
c
)
);
case
Context
:
return
u
.
c
.
sanitize
(
c
);
case
Context
:
return
TRACE_RETURN
(
u
.
c
.
sanitize
(
c
)
);
case
ChainContext
:
return
u
.
chainContext
.
sanitize
(
c
);
case
ChainContext
:
return
TRACE_RETURN
(
u
.
chainContext
.
sanitize
(
c
)
);
case
Extension
:
return
u
.
extension
.
sanitize
(
c
);
case
Extension
:
return
TRACE_RETURN
(
u
.
extension
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1443,9 +1423,9 @@ struct PosLookup : Lookup
...
@@ -1443,9 +1423,9 @@ struct PosLookup : Lookup
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
Lookup
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
Lookup
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
OffsetArrayOf
<
PosLookupSubTable
>
&
list
=
CastR
<
OffsetArrayOf
<
PosLookupSubTable
>
>
(
subTable
);
OffsetArrayOf
<
PosLookupSubTable
>
&
list
=
CastR
<
OffsetArrayOf
<
PosLookupSubTable
>
>
(
subTable
);
return
list
.
sanitize
(
c
,
this
,
get_type
(
));
return
TRACE_RETURN
(
list
.
sanitize
(
c
,
this
,
get_type
()
));
}
}
};
};
...
@@ -1470,9 +1450,9 @@ struct GPOS : GSUBGPOS
...
@@ -1470,9 +1450,9 @@ struct GPOS : GSUBGPOS
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
GSUBGPOS
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
GSUBGPOS
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
OffsetTo
<
PosLookupList
>
&
list
=
CastR
<
OffsetTo
<
PosLookupList
>
>
(
lookupList
);
OffsetTo
<
PosLookupList
>
&
list
=
CastR
<
OffsetTo
<
PosLookupList
>
>
(
lookupList
);
return
list
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
list
.
sanitize
(
c
,
this
)
);
}
}
public:
public:
DEFINE_SIZE_STATIC
(
10
);
DEFINE_SIZE_STATIC
(
10
);
...
@@ -1564,10 +1544,10 @@ inline bool ExtensionPos::apply (hb_apply_context_t *c) const
...
@@ -1564,10 +1544,10 @@ inline bool ExtensionPos::apply (hb_apply_context_t *c) const
inline
bool
ExtensionPos
::
sanitize
(
hb_sanitize_context_t
*
c
)
inline
bool
ExtensionPos
::
sanitize
(
hb_sanitize_context_t
*
c
)
{
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
Extension
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
Extension
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
offset
=
get_offset
();
unsigned
int
offset
=
get_offset
();
if
(
unlikely
(
!
offset
))
return
true
;
if
(
unlikely
(
!
offset
))
return
TRACE_RETURN
(
true
)
;
return
StructAtOffset
<
PosLookupSubTable
>
(
this
,
offset
).
sanitize
(
c
,
get_type
(
));
return
TRACE_RETURN
(
StructAtOffset
<
PosLookupSubTable
>
(
this
,
offset
).
sanitize
(
c
,
get_type
()
));
}
}
static
inline
bool
position_lookup
(
hb_apply_context_t
*
c
,
unsigned
int
lookup_index
)
static
inline
bool
position_lookup
(
hb_apply_context_t
*
c
,
unsigned
int
lookup_index
)
...
...
src/hb-ot-layout-gsub-table.hh
浏览文件 @
0ab8c862
...
@@ -73,8 +73,7 @@ struct SingleSubstFormat1
...
@@ -73,8 +73,7 @@ struct SingleSubstFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
deltaGlyphID
.
sanitize
(
c
));
&&
deltaGlyphID
.
sanitize
(
c
);
}
}
private:
private:
...
@@ -128,8 +127,7 @@ struct SingleSubstFormat2
...
@@ -128,8 +127,7 @@ struct SingleSubstFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
substitute
.
sanitize
(
c
));
&&
substitute
.
sanitize
(
c
);
}
}
private:
private:
...
@@ -181,11 +179,11 @@ struct SingleSubst
...
@@ -181,11 +179,11 @@ struct SingleSubst
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -228,7 +226,7 @@ struct Sequence
...
@@ -228,7 +226,7 @@ struct Sequence
public:
public:
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
substitute
.
sanitize
(
c
);
return
TRACE_RETURN
(
substitute
.
sanitize
(
c
)
);
}
}
private:
private:
...
@@ -272,8 +270,7 @@ struct MultipleSubstFormat1
...
@@ -272,8 +270,7 @@ struct MultipleSubstFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
sequence
.
sanitize
(
c
,
this
));
&&
sequence
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -322,10 +319,10 @@ struct MultipleSubst
...
@@ -322,10 +319,10 @@ struct MultipleSubst
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -398,8 +395,7 @@ struct AlternateSubstFormat1
...
@@ -398,8 +395,7 @@ struct AlternateSubstFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
alternateSet
.
sanitize
(
c
,
this
));
&&
alternateSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -448,10 +444,10 @@ struct AlternateSubst
...
@@ -448,10 +444,10 @@ struct AlternateSubst
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -552,8 +548,7 @@ struct Ligature
...
@@ -552,8 +548,7 @@ struct Ligature
public:
public:
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
ligGlyph
.
sanitize
(
c
)
return
TRACE_RETURN
(
ligGlyph
.
sanitize
(
c
)
&&
component
.
sanitize
(
c
));
&&
component
.
sanitize
(
c
);
}
}
private:
private:
...
@@ -609,7 +604,7 @@ struct LigatureSet
...
@@ -609,7 +604,7 @@ struct LigatureSet
public:
public:
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
ligature
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
ligature
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -658,8 +653,7 @@ struct LigatureSubstFormat1
...
@@ -658,8 +653,7 @@ struct LigatureSubstFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
ligatureSet
.
sanitize
(
c
,
this
));
&&
ligatureSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -708,10 +702,10 @@ struct LigatureSubst
...
@@ -708,10 +702,10 @@ struct LigatureSubst
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -852,14 +846,13 @@ struct ReverseChainSingleSubstFormat1
...
@@ -852,14 +846,13 @@ struct ReverseChainSingleSubstFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
(
coverage
.
sanitize
(
c
,
this
)
if
(
!
(
coverage
.
sanitize
(
c
,
this
)
&&
backtrack
.
sanitize
(
c
,
this
)))
&&
backtrack
.
sanitize
(
c
,
this
)))
return
TRACE_RETURN
(
false
);
return
false
;
OffsetArrayOf
<
Coverage
>
&
lookahead
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
backtrack
);
OffsetArrayOf
<
Coverage
>
&
lookahead
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
backtrack
);
if
(
!
lookahead
.
sanitize
(
c
,
this
))
if
(
!
lookahead
.
sanitize
(
c
,
this
))
return
false
;
return
TRACE_RETURN
(
false
)
;
ArrayOf
<
GlyphID
>
&
substitute
=
StructAfter
<
ArrayOf
<
GlyphID
>
>
(
lookahead
);
ArrayOf
<
GlyphID
>
&
substitute
=
StructAfter
<
ArrayOf
<
GlyphID
>
>
(
lookahead
);
return
substitute
.
sanitize
(
c
);
return
TRACE_RETURN
(
substitute
.
sanitize
(
c
)
);
}
}
private:
private:
...
@@ -908,10 +901,10 @@ struct ReverseChainSingleSubst
...
@@ -908,10 +901,10 @@ struct ReverseChainSingleSubst
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -968,7 +961,7 @@ struct SubstLookupSubTable
...
@@ -968,7 +961,7 @@ struct SubstLookupSubTable
case
Multiple
:
return
u
.
multiple
.
would_apply
(
glyph_id
);
case
Multiple
:
return
u
.
multiple
.
would_apply
(
glyph_id
);
case
Alternate
:
return
u
.
alternate
.
would_apply
(
glyph_id
);
case
Alternate
:
return
u
.
alternate
.
would_apply
(
glyph_id
);
case
Extension
:
return
u
.
extension
.
would_apply
(
glyph_id
);
case
Extension
:
return
u
.
extension
.
would_apply
(
glyph_id
);
default:
return
false
;
default:
return
false
;
}
}
}
}
inline
bool
would_apply
(
hb_codepoint_t
first
,
inline
bool
would_apply
(
hb_codepoint_t
first
,
...
@@ -978,7 +971,7 @@ struct SubstLookupSubTable
...
@@ -978,7 +971,7 @@ struct SubstLookupSubTable
switch
(
lookup_type
)
{
switch
(
lookup_type
)
{
case
Ligature
:
return
u
.
ligature
.
would_apply
(
first
,
second
);
case
Ligature
:
return
u
.
ligature
.
would_apply
(
first
,
second
);
case
Extension
:
return
u
.
extension
.
would_apply
(
first
,
second
);
case
Extension
:
return
u
.
extension
.
would_apply
(
first
,
second
);
default:
return
false
;
default:
return
false
;
}
}
}
}
...
@@ -994,22 +987,22 @@ struct SubstLookupSubTable
...
@@ -994,22 +987,22 @@ struct SubstLookupSubTable
case
ChainContext
:
return
u
.
chainContext
.
apply
(
c
);
case
ChainContext
:
return
u
.
chainContext
.
apply
(
c
);
case
Extension
:
return
u
.
extension
.
apply
(
c
);
case
Extension
:
return
u
.
extension
.
apply
(
c
);
case
ReverseChainSingle
:
return
u
.
reverseChainContextSingle
.
apply
(
c
);
case
ReverseChainSingle
:
return
u
.
reverseChainContextSingle
.
apply
(
c
);
default:
return
false
;
default:
return
false
;
}
}
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
lookup_type
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
unsigned
int
lookup_type
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
switch
(
lookup_type
)
{
switch
(
lookup_type
)
{
case
Single
:
return
u
.
single
.
sanitize
(
c
);
case
Single
:
return
TRACE_RETURN
(
u
.
single
.
sanitize
(
c
)
);
case
Multiple
:
return
u
.
multiple
.
sanitize
(
c
);
case
Multiple
:
return
TRACE_RETURN
(
u
.
multiple
.
sanitize
(
c
)
);
case
Alternate
:
return
u
.
alternate
.
sanitize
(
c
);
case
Alternate
:
return
TRACE_RETURN
(
u
.
alternate
.
sanitize
(
c
)
);
case
Ligature
:
return
u
.
ligature
.
sanitize
(
c
);
case
Ligature
:
return
TRACE_RETURN
(
u
.
ligature
.
sanitize
(
c
)
);
case
Context
:
return
u
.
c
.
sanitize
(
c
);
case
Context
:
return
TRACE_RETURN
(
u
.
c
.
sanitize
(
c
)
);
case
ChainContext
:
return
u
.
chainContext
.
sanitize
(
c
);
case
ChainContext
:
return
TRACE_RETURN
(
u
.
chainContext
.
sanitize
(
c
)
);
case
Extension
:
return
u
.
extension
.
sanitize
(
c
);
case
Extension
:
return
TRACE_RETURN
(
u
.
extension
.
sanitize
(
c
)
);
case
ReverseChainSingle
:
return
u
.
reverseChainContextSingle
.
sanitize
(
c
);
case
ReverseChainSingle
:
return
TRACE_RETURN
(
u
.
reverseChainContextSingle
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1147,9 +1140,9 @@ struct SubstLookup : Lookup
...
@@ -1147,9 +1140,9 @@ struct SubstLookup : Lookup
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
Lookup
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
Lookup
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
OffsetArrayOf
<
SubstLookupSubTable
>
&
list
=
CastR
<
OffsetArrayOf
<
SubstLookupSubTable
>
>
(
subTable
);
OffsetArrayOf
<
SubstLookupSubTable
>
&
list
=
CastR
<
OffsetArrayOf
<
SubstLookupSubTable
>
>
(
subTable
);
return
list
.
sanitize
(
c
,
this
,
get_type
(
));
return
TRACE_RETURN
(
list
.
sanitize
(
c
,
this
,
get_type
()
));
}
}
};
};
...
@@ -1178,9 +1171,9 @@ struct GSUB : GSUBGPOS
...
@@ -1178,9 +1171,9 @@ struct GSUB : GSUBGPOS
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
GSUBGPOS
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
GSUBGPOS
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
OffsetTo
<
SubstLookupList
>
&
list
=
CastR
<
OffsetTo
<
SubstLookupList
>
>
(
lookupList
);
OffsetTo
<
SubstLookupList
>
&
list
=
CastR
<
OffsetTo
<
SubstLookupList
>
>
(
lookupList
);
return
list
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
list
.
sanitize
(
c
,
this
)
);
}
}
public:
public:
DEFINE_SIZE_STATIC
(
10
);
DEFINE_SIZE_STATIC
(
10
);
...
@@ -1230,10 +1223,10 @@ inline bool ExtensionSubst::apply (hb_apply_context_t *c) const
...
@@ -1230,10 +1223,10 @@ inline bool ExtensionSubst::apply (hb_apply_context_t *c) const
inline
bool
ExtensionSubst
::
sanitize
(
hb_sanitize_context_t
*
c
)
inline
bool
ExtensionSubst
::
sanitize
(
hb_sanitize_context_t
*
c
)
{
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
unlikely
(
!
Extension
::
sanitize
(
c
)))
return
false
;
if
(
unlikely
(
!
Extension
::
sanitize
(
c
)))
return
TRACE_RETURN
(
false
)
;
unsigned
int
offset
=
get_offset
();
unsigned
int
offset
=
get_offset
();
if
(
unlikely
(
!
offset
))
return
true
;
if
(
unlikely
(
!
offset
))
return
TRACE_RETURN
(
true
)
;
return
StructAtOffset
<
SubstLookupSubTable
>
(
this
,
offset
).
sanitize
(
c
,
get_type
(
));
return
TRACE_RETURN
(
StructAtOffset
<
SubstLookupSubTable
>
(
this
,
offset
).
sanitize
(
c
,
get_type
()
));
}
}
inline
bool
ExtensionSubst
::
is_reverse
(
void
)
const
inline
bool
ExtensionSubst
::
is_reverse
(
void
)
const
...
...
src/hb-ot-layout-gsubgpos-private.hh
浏览文件 @
0ab8c862
...
@@ -69,7 +69,7 @@ static inline uint8_t allocate_lig_id (hb_buffer_t *buffer) {
...
@@ -69,7 +69,7 @@ static inline uint8_t allocate_lig_id (hb_buffer_t *buffer) {
#endif
#endif
#define TRACE_CLOSURE() \
#define TRACE_CLOSURE() \
hb_auto_trace_t<HB_DEBUG_CLOSURE
, unsigned int
> trace (&c->debug_depth, "CLOSURE", this, HB_FUNC, "");
hb_auto_trace_t<HB_DEBUG_CLOSURE> trace (&c->debug_depth, "CLOSURE", this, HB_FUNC, "");
...
@@ -96,7 +96,7 @@ struct hb_closure_context_t
...
@@ -96,7 +96,7 @@ struct hb_closure_context_t
#endif
#endif
#define TRACE_APPLY() \
#define TRACE_APPLY() \
hb_auto_trace_t<HB_DEBUG_APPLY
, unsigned int
> trace (&c->debug_depth, "APPLY", this, HB_FUNC, "");
hb_auto_trace_t<HB_DEBUG_APPLY> trace (&c->debug_depth, "APPLY", this, HB_FUNC, "");
...
@@ -381,7 +381,7 @@ struct LookupRecord
...
@@ -381,7 +381,7 @@ struct LookupRecord
{
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
USHORT
sequenceIndex
;
/* Index into current glyph
USHORT
sequenceIndex
;
/* Index into current glyph
...
@@ -583,7 +583,7 @@ struct RuleSet
...
@@ -583,7 +583,7 @@ struct RuleSet
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
rule
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
rule
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -637,8 +637,7 @@ struct ContextFormat1
...
@@ -637,8 +637,7 @@ struct ContextFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
ruleSet
.
sanitize
(
c
,
this
));
&&
ruleSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -700,9 +699,7 @@ struct ContextFormat2
...
@@ -700,9 +699,7 @@ struct ContextFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
classDef
.
sanitize
(
c
,
this
)
&&
ruleSet
.
sanitize
(
c
,
this
));
&&
classDef
.
sanitize
(
c
,
this
)
&&
ruleSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -764,13 +761,13 @@ struct ContextFormat3
...
@@ -764,13 +761,13 @@ struct ContextFormat3
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
c
->
check_struct
(
this
))
return
false
;
if
(
!
c
->
check_struct
(
this
))
return
TRACE_RETURN
(
false
)
;
unsigned
int
count
=
glyphCount
;
unsigned
int
count
=
glyphCount
;
if
(
!
c
->
check_array
(
coverage
,
coverage
[
0
].
static_size
,
count
))
return
false
;
if
(
!
c
->
check_array
(
coverage
,
coverage
[
0
].
static_size
,
count
))
return
TRACE_RETURN
(
false
)
;
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
count
;
i
++
)
if
(
!
coverage
[
i
].
sanitize
(
c
,
this
))
return
false
;
if
(
!
coverage
[
i
].
sanitize
(
c
,
this
))
return
TRACE_RETURN
(
false
)
;
LookupRecord
*
lookupRecord
=
&
StructAtOffset
<
LookupRecord
>
(
coverage
,
coverage
[
0
].
static_size
*
count
);
LookupRecord
*
lookupRecord
=
&
StructAtOffset
<
LookupRecord
>
(
coverage
,
coverage
[
0
].
static_size
*
count
);
return
c
->
check_array
(
lookupRecord
,
lookupRecord
[
0
].
static_size
,
lookupCount
);
return
TRACE_RETURN
(
c
->
check_array
(
lookupRecord
,
lookupRecord
[
0
].
static_size
,
lookupCount
)
);
}
}
private:
private:
...
@@ -815,12 +812,12 @@ struct Context
...
@@ -815,12 +812,12 @@ struct Context
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
case
3
:
return
u
.
format3
.
sanitize
(
c
);
case
3
:
return
TRACE_RETURN
(
u
.
format3
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -945,13 +942,13 @@ struct ChainRule
...
@@ -945,13 +942,13 @@ struct ChainRule
public:
public:
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
backtrack
.
sanitize
(
c
))
return
false
;
if
(
!
backtrack
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
HeadlessArrayOf
<
USHORT
>
&
input
=
StructAfter
<
HeadlessArrayOf
<
USHORT
>
>
(
backtrack
);
HeadlessArrayOf
<
USHORT
>
&
input
=
StructAfter
<
HeadlessArrayOf
<
USHORT
>
>
(
backtrack
);
if
(
!
input
.
sanitize
(
c
))
return
false
;
if
(
!
input
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
ArrayOf
<
USHORT
>
&
lookahead
=
StructAfter
<
ArrayOf
<
USHORT
>
>
(
input
);
ArrayOf
<
USHORT
>
&
lookahead
=
StructAfter
<
ArrayOf
<
USHORT
>
>
(
input
);
if
(
!
lookahead
.
sanitize
(
c
))
return
false
;
if
(
!
lookahead
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
ArrayOf
<
LookupRecord
>
&
lookup
=
StructAfter
<
ArrayOf
<
LookupRecord
>
>
(
lookahead
);
ArrayOf
<
LookupRecord
>
&
lookup
=
StructAfter
<
ArrayOf
<
LookupRecord
>
>
(
lookahead
);
return
lookup
.
sanitize
(
c
);
return
TRACE_RETURN
(
lookup
.
sanitize
(
c
)
);
}
}
private:
private:
...
@@ -997,7 +994,7 @@ struct ChainRuleSet
...
@@ -997,7 +994,7 @@ struct ChainRuleSet
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
rule
.
sanitize
(
c
,
this
);
return
TRACE_RETURN
(
rule
.
sanitize
(
c
,
this
)
);
}
}
private:
private:
...
@@ -1049,8 +1046,7 @@ struct ChainContextFormat1
...
@@ -1049,8 +1046,7 @@ struct ChainContextFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
ruleSet
.
sanitize
(
c
,
this
));
&&
ruleSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -1120,11 +1116,9 @@ struct ChainContextFormat2
...
@@ -1120,11 +1116,9 @@ struct ChainContextFormat2
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
coverage
.
sanitize
(
c
,
this
)
return
TRACE_RETURN
(
coverage
.
sanitize
(
c
,
this
)
&&
backtrackClassDef
.
sanitize
(
c
,
this
)
&&
&&
backtrackClassDef
.
sanitize
(
c
,
this
)
inputClassDef
.
sanitize
(
c
,
this
)
&&
lookaheadClassDef
.
sanitize
(
c
,
this
)
&&
&&
inputClassDef
.
sanitize
(
c
,
this
)
ruleSet
.
sanitize
(
c
,
this
));
&&
lookaheadClassDef
.
sanitize
(
c
,
this
)
&&
ruleSet
.
sanitize
(
c
,
this
);
}
}
private:
private:
...
@@ -1204,13 +1198,13 @@ struct ChainContextFormat3
...
@@ -1204,13 +1198,13 @@ struct ChainContextFormat3
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
backtrack
.
sanitize
(
c
,
this
))
return
false
;
if
(
!
backtrack
.
sanitize
(
c
,
this
))
return
TRACE_RETURN
(
false
)
;
OffsetArrayOf
<
Coverage
>
&
input
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
backtrack
);
OffsetArrayOf
<
Coverage
>
&
input
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
backtrack
);
if
(
!
input
.
sanitize
(
c
,
this
))
return
false
;
if
(
!
input
.
sanitize
(
c
,
this
))
return
TRACE_RETURN
(
false
)
;
OffsetArrayOf
<
Coverage
>
&
lookahead
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
input
);
OffsetArrayOf
<
Coverage
>
&
lookahead
=
StructAfter
<
OffsetArrayOf
<
Coverage
>
>
(
input
);
if
(
!
lookahead
.
sanitize
(
c
,
this
))
return
false
;
if
(
!
lookahead
.
sanitize
(
c
,
this
))
return
TRACE_RETURN
(
false
)
;
ArrayOf
<
LookupRecord
>
&
lookup
=
StructAfter
<
ArrayOf
<
LookupRecord
>
>
(
lookahead
);
ArrayOf
<
LookupRecord
>
&
lookup
=
StructAfter
<
ArrayOf
<
LookupRecord
>
>
(
lookahead
);
return
lookup
.
sanitize
(
c
);
return
TRACE_RETURN
(
lookup
.
sanitize
(
c
)
);
}
}
private:
private:
...
@@ -1262,12 +1256,12 @@ struct ChainContext
...
@@ -1262,12 +1256,12 @@ struct ChainContext
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
case
2
:
return
u
.
format2
.
sanitize
(
c
);
case
2
:
return
TRACE_RETURN
(
u
.
format2
.
sanitize
(
c
)
);
case
3
:
return
u
.
format3
.
sanitize
(
c
);
case
3
:
return
TRACE_RETURN
(
u
.
format3
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1291,7 +1285,7 @@ struct ExtensionFormat1
...
@@ -1291,7 +1285,7 @@ struct ExtensionFormat1
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
);
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
);
}
}
private:
private:
...
@@ -1324,10 +1318,10 @@ struct Extension
...
@@ -1324,10 +1318,10 @@ struct Extension
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
if
(
!
u
.
format
.
sanitize
(
c
))
return
false
;
if
(
!
u
.
format
.
sanitize
(
c
))
return
TRACE_RETURN
(
false
)
;
switch
(
u
.
format
)
{
switch
(
u
.
format
)
{
case
1
:
return
u
.
format1
.
sanitize
(
c
);
case
1
:
return
TRACE_RETURN
(
u
.
format1
.
sanitize
(
c
)
);
default:
return
true
;
default:
return
TRACE_RETURN
(
true
)
;
}
}
}
}
...
@@ -1381,10 +1375,10 @@ struct GSUBGPOS
...
@@ -1381,10 +1375,10 @@ struct GSUBGPOS
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
version
.
sanitize
(
c
)
&&
likely
(
version
.
major
==
1
)
return
TRACE_RETURN
(
version
.
sanitize
(
c
)
&&
likely
(
version
.
major
==
1
)
&&
&&
scriptList
.
sanitize
(
c
,
this
)
scriptList
.
sanitize
(
c
,
this
)
&&
&&
featureList
.
sanitize
(
c
,
this
)
featureList
.
sanitize
(
c
,
this
)
&&
&&
lookupList
.
sanitize
(
c
,
this
);
lookupList
.
sanitize
(
c
,
this
)
);
}
}
protected:
protected:
...
...
src/hb-ot-maxp-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2011 Google, Inc.
* Copyright © 2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -47,9 +47,8 @@ struct maxp
...
@@ -47,9 +47,8 @@ struct maxp
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
&&
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
likely
(
version
.
major
==
1
||
likely
(
version
.
major
==
1
||
(
version
.
major
==
0
&&
version
.
minor
==
0x5000
)));
(
version
.
major
==
0
&&
version
.
minor
==
0x5000
));
}
}
/* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
/* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
...
...
src/hb-ot-name-table.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2011 Google, Inc.
* Copyright © 2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -57,8 +57,7 @@ struct NameRecord
...
@@ -57,8 +57,7 @@ struct NameRecord
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
,
void
*
base
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
/* We can check from base all the way up to the end of string... */
/* We can check from base all the way up to the end of string... */
return
c
->
check_struct
(
this
)
&&
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
c
->
check_range
((
char
*
)
base
,
(
unsigned
int
)
length
+
offset
));
c
->
check_range
((
char
*
)
base
,
(
unsigned
int
)
length
+
offset
);
}
}
USHORT
platformID
;
/* Platform ID. */
USHORT
platformID
;
/* Platform ID. */
...
@@ -102,16 +101,16 @@ struct name
...
@@ -102,16 +101,16 @@ struct name
char
*
string_pool
=
(
char
*
)
this
+
stringOffset
;
char
*
string_pool
=
(
char
*
)
this
+
stringOffset
;
unsigned
int
_count
=
count
;
unsigned
int
_count
=
count
;
for
(
unsigned
int
i
=
0
;
i
<
_count
;
i
++
)
for
(
unsigned
int
i
=
0
;
i
<
_count
;
i
++
)
if
(
!
nameRecord
[
i
].
sanitize
(
c
,
string_pool
))
return
false
;
if
(
!
nameRecord
[
i
].
sanitize
(
c
,
string_pool
))
return
TRACE_RETURN
(
false
)
;
return
true
;
return
TRACE_RETURN
(
true
)
;
}
}
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
inline
bool
sanitize
(
hb_sanitize_context_t
*
c
)
{
TRACE_SANITIZE
();
TRACE_SANITIZE
();
return
c
->
check_struct
(
this
)
&&
return
TRACE_RETURN
(
c
->
check_struct
(
this
)
&&
likely
(
format
==
0
||
format
==
1
)
&&
likely
(
format
==
0
||
format
==
1
)
&&
c
->
check_array
(
nameRecord
,
nameRecord
[
0
].
static_size
,
count
)
&&
c
->
check_array
(
nameRecord
,
nameRecord
[
0
].
static_size
,
count
)
&&
sanitize_records
(
c
);
sanitize_records
(
c
)
);
}
}
/* We only implement format 0 for now. */
/* We only implement format 0 for now. */
...
...
src/hb-private.hh
浏览文件 @
0ab8c862
/*
/*
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2007,2008,2009 Red Hat, Inc.
* Copyright © 2011 Google, Inc.
* Copyright © 2011
,2012
Google, Inc.
*
*
* This is part of HarfBuzz, a text shaping library.
* This is part of HarfBuzz, a text shaping library.
*
*
...
@@ -519,7 +519,7 @@ _hb_debug_msg_va (const char *what,
...
@@ -519,7 +519,7 @@ _hb_debug_msg_va (const char *what,
fprintf
(
stderr
,
"%-10s"
,
what
?
what
:
""
);
fprintf
(
stderr
,
"%-10s"
,
what
?
what
:
""
);
if
(
obj
)
if
(
obj
)
fprintf
(
stderr
,
"(%
p) "
,
obj
);
fprintf
(
stderr
,
"(%
0*x) "
,
(
unsigned
int
)
(
2
*
sizeof
(
void
*
)),
(
unsigned
long
)
obj
);
else
else
fprintf
(
stderr
,
" %*s "
,
(
unsigned
int
)
(
2
*
sizeof
(
void
*
)),
""
);
fprintf
(
stderr
,
" %*s "
,
(
unsigned
int
)
(
2
*
sizeof
(
void
*
)),
""
);
...
@@ -601,14 +601,14 @@ _hb_debug_msg<0> (const char *what,
...
@@ -601,14 +601,14 @@ _hb_debug_msg<0> (const char *what,
* Trace
* Trace
*/
*/
template
<
int
max_level
,
typename
T
>
template
<
int
max_level
>
struct
hb_auto_trace_t
{
struct
hb_auto_trace_t
{
explicit
inline
hb_auto_trace_t
(
unsigned
int
*
plevel_
,
explicit
inline
hb_auto_trace_t
(
unsigned
int
*
plevel_
,
const
char
*
what
,
const
char
*
what
,
const
void
*
obj
,
const
void
*
obj
,
const
char
*
func
,
const
char
*
func
,
const
char
*
message
,
const
char
*
message
,
...)
:
plevel
(
plevel_
)
...)
:
plevel
(
plevel_
)
,
returned
(
false
)
{
{
if
(
plevel
)
++*
plevel
;
if
(
plevel
)
++*
plevel
;
...
@@ -617,26 +617,49 @@ struct hb_auto_trace_t {
...
@@ -617,26 +617,49 @@ struct hb_auto_trace_t {
_hb_debug_msg_va
<
max_level
>
(
what
,
obj
,
func
,
TRUE
,
plevel
?
*
plevel
:
0
,
+
1
,
message
,
ap
);
_hb_debug_msg_va
<
max_level
>
(
what
,
obj
,
func
,
TRUE
,
plevel
?
*
plevel
:
0
,
+
1
,
message
,
ap
);
va_end
(
ap
);
va_end
(
ap
);
}
}
~
hb_auto_trace_t
(
void
)
inline
~
hb_auto_trace_t
(
void
)
{
{
_hb_debug_msg
<
max_level
>
(
NULL
,
NULL
,
NULL
,
TRUE
,
plevel
?
*
plevel
:
1
,
-
1
,
" "
);
if
(
unlikely
(
!
returned
))
{
fprintf
(
stderr
,
"OUCH, returned with no call to TRACE_RETURN. This is a bug, please report. Level was %d.
\n
"
,
plevel
?
*
plevel
:
-
1
);
_hb_debug_msg
<
max_level
>
(
NULL
,
NULL
,
NULL
,
TRUE
,
plevel
?
*
plevel
:
1
,
-
1
,
" "
);
return
;
}
if
(
plevel
)
--*
plevel
;
if
(
plevel
)
--*
plevel
;
}
}
inline
bool
ret
(
bool
v
)
{
if
(
unlikely
(
returned
))
{
fprintf
(
stderr
,
"OUCH, double calls to TRACE_RETURN. This is a bug, please report.
\n
"
);
return
v
;
}
_hb_debug_msg
<
max_level
>
(
NULL
,
NULL
,
NULL
,
TRUE
,
plevel
?
*
plevel
:
1
,
-
1
,
"return %s"
,
v
?
"true"
:
"false"
);
if
(
plevel
)
--*
plevel
;
plevel
=
NULL
;
returned
=
true
;
return
v
;
}
private:
private:
unsigned
int
*
plevel
;
unsigned
int
*
plevel
;
bool
returned
;
};
};
template
<
typename
T
>
/* Optimize when tracing is disabled */
template
<
>
/* Optimize when tracing is disabled */
struct
hb_auto_trace_t
<
0
,
T
>
{
struct
hb_auto_trace_t
<
0
>
{
explicit
inline
hb_auto_trace_t
(
unsigned
int
*
plevel_
,
explicit
inline
hb_auto_trace_t
(
unsigned
int
*
plevel_
,
const
char
*
what
,
const
char
*
what
,
const
void
*
obj
,
const
void
*
obj
,
const
char
*
func
,
const
char
*
func
,
const
char
*
message
,
const
char
*
message
,
...)
{}
...)
{}
template
<
typename
T
>
inline
T
ret
(
T
v
)
{
return
v
;
}
};
};
#define TRACE_RETURN(RET) trace.ret (RET)
/* Misc */
/* Misc */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录