Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
qq_34031325
engine
提交
fd478815
E
engine
项目概览
qq_34031325
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
fd478815
编写于
11月 01, 2017
作者:
J
Jason Simmons
提交者:
GitHub
11月 01, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Validate UTF-16 input in ParagraphBuilder::addText (#4300)
Fixes
https://github.com/flutter/flutter/issues/12772
上级
64f44577
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
25 addition
and
5 deletion
+25
-5
lib/ui/text.dart
lib/ui/text.dart
+6
-1
lib/ui/text/paragraph_builder.cc
lib/ui/text/paragraph_builder.cc
+18
-3
lib/ui/text/paragraph_builder.h
lib/ui/text/paragraph_builder.h
+1
-1
未找到文件。
lib/ui/text.dart
浏览文件 @
fd478815
...
...
@@ -970,7 +970,12 @@ class ParagraphBuilder extends NativeFieldWrapperClass2 {
/// Adds the given text to the paragraph.
///
/// The text will be styled according to the current stack of text styles.
void
addText
(
String
text
)
native
"ParagraphBuilder_addText"
;
void
addText
(
String
text
)
{
String
error
=
_addText
(
text
);
if
(
error
!=
null
)
throw
new
ArgumentError
(
error
);
}
String
_addText
(
String
text
)
native
"ParagraphBuilder_addText"
;
/// Applies the given paragraph style and returns a [Paragraph] containing the
/// added text and associated styling.
...
...
lib/ui/text/paragraph_builder.cc
浏览文件 @
fd478815
...
...
@@ -417,19 +417,34 @@ void ParagraphBuilder::pop() {
}
}
void
ParagraphBuilder
::
addText
(
const
std
::
string
&
text
)
{
Dart_Handle
ParagraphBuilder
::
addText
(
const
std
::
u16string
&
text
)
{
if
(
text
.
empty
())
return
Dart_Null
();
// Use ICU to validate the UTF-16 input. Calling u_strToUTF8 with a null
// output buffer will return U_BUFFER_OVERFLOW_ERROR if the input is well
// formed.
const
UChar
*
text_ptr
=
reinterpret_cast
<
const
UChar
*>
(
text
.
data
());
UErrorCode
error_code
=
U_ZERO_ERROR
;
u_strToUTF8
(
nullptr
,
0
,
nullptr
,
text_ptr
,
text
.
size
(),
&
error_code
);
if
(
error_code
!=
U_BUFFER_OVERFLOW_ERROR
)
return
tonic
::
ToDart
(
"string is not well-formed UTF-16"
);
if
(
!
Settings
::
Get
().
using_blink
)
{
m_paragraphBuilder
->
AddText
(
text
);
}
else
{
// Blink Version.
if
(
!
m_currentRenderObject
)
return
;
RenderText
*
renderText
=
new
RenderText
(
String
::
fromUTF8
(
text
).
impl
());
return
tonic
::
ToDart
(
"paragraph has already been built"
);
RenderText
*
renderText
=
new
RenderText
(
String
(
text_ptr
,
text
.
size
()).
impl
());
RefPtr
<
RenderStyle
>
style
=
RenderStyle
::
create
();
style
->
inheritFrom
(
m_currentRenderObject
->
style
());
renderText
->
setStyle
(
style
.
release
());
m_currentRenderObject
->
addChild
(
renderText
);
}
return
Dart_Null
();
}
fxl
::
RefPtr
<
Paragraph
>
ParagraphBuilder
::
build
()
{
...
...
lib/ui/text/paragraph_builder.h
浏览文件 @
fd478815
...
...
@@ -44,7 +44,7 @@ class ParagraphBuilder : public fxl::RefCountedThreadSafe<ParagraphBuilder>,
void
pop
();
void
addText
(
const
std
::
string
&
text
);
Dart_Handle
addText
(
const
std
::
u16
string
&
text
);
fxl
::
RefPtr
<
Paragraph
>
build
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录