【环境信息】
x86
【测试版本】
Name: libsass
Version: 3.5.4
Release: 4
【注意事项】
受影响版本排查(受影响/不受影响)
1、master
2、openEuler-LTS-20.03
3、openEuler-LTS-20.03-SP1
4、openEuler-LTS-20.03-Next
5、openEuler-20.09
【测试步骤】
1、编译
python3 infra/helper.py build_fuzzers --sanitizer memory libsass
2、执行
python3 infra/helper.py run_fuzzer libsass data_context_fuzzer -rss_limit_mb=0
【报错信息】
==13==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x56e326 in Sass::handle_error(Sass_Context*) /src/libsass/src/sass_context.cpp:81:38
#1 0x55fa45 in handle_errors /src/libsass/src/sass_context.cpp:207:18
#2 0x55fa45 in sass_parse_block /src/libsass/src/sass_context.cpp:253:19
#3 0x55fa45 in sass_compiler_parse /src/libsass/src/sass_context.cpp:483:22
#4 0x55d84e in sass_compile_context(Sass_Context*, Sass::Context*) /src/libsass/src/sass_context.cpp:371:7
#5 0x55d48a in sass_compile_data_context /src/libsass/src/sass_context.cpp:456:12
#6 0x559047 in LLVMFuzzerTestOneInput /src/data_context_fuzzer.cc:26:3
#7 0x490611 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:556:15
#8 0x48fd55 in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool*) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:470:3
#9 0x491e27 in fuzzer::Fuzzer::MutateAndTestOne() /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:698:19
#10 0x4928a5 in fuzzer::Fuzzer::Loop(std::__Fuzzer::vector<fuzzer::SizedFile, fuzzer::fuzzer_allocator<fuzzer::SizedFile> >&) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:832:5
#11 0x48187e in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:826:6
#12 0x4aa052 in main /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:19:10
#13 0x7fb86dbbd82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
#14 0x455f88 in _start (/out/data_context_fuzzer+0x455f88)
Uninitialized value was created by a heap allocation
#0 0x5099dd in malloc /src/llvm-project/compiler-rt/lib/msan/msan_interceptors.cpp:901:3
#1 0x558e96 in LLVMFuzzerTestOneInput /src/data_context_fuzzer.cc:4:29
#2 0x490611 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:556:15
#3 0x48fd55 in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool*) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:470:3
#4 0x491e27 in fuzzer::Fuzzer::MutateAndTestOne() /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:698:19
#5 0x4928a5 in fuzzer::Fuzzer::Loop(std::__Fuzzer::vector<fuzzer::SizedFile, fuzzer::fuzzer_allocator<fuzzer::SizedFile> >&) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:832:5
#6 0x48187e in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:826:6
#7 0x4aa052 in main /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:19:10
#8 0x7fb86dbbd82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
SUMMARY: MemorySanitizer: use-of-uninitialized-value /src/libsass/src/sass_context.cpp:81:38 in Sass::handle_error(Sass_Context*)
Unique heap origins: 4847
Stack depot allocated bytes: 792488
Unique origin histories: 1616
History depot allocated bytes: 38784
Exiting
MS: 1 ChangeBinInt-; base unit: b7338988044eec4761d552baddaecea1b928947c
0x9d,0x9c,0xf1,0x9d,
\x9d\x9c\xf1\x9d
artifact_prefix='./'; Test unit written to ./crash-46b881641fa27e6a451467e36388b30e3c81c217
Base64: nZzxnQ==
【问题复现】
python infra/helper.py reproduce libsass data_context_fuzzer crash-46b881641fa27e6a451467e36388b30e3c81c217
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
差异分析:
1.版本信息
当前版本:3.5.4
升级版本:3.6.4
2.特性变化
见下面具体描述
3.ABI差异
见下面具体描述
4.配置文件变化
无
5.命令变化
无
6.依赖关系
无
7.受影响需要重新编译的包
sassc依赖libsass,已验证升级libsass对sassc无影响,编译安装卸载均正常。
2.特性变化:
此版本修复了由于dart-sass代码反向移植而引入的回归。此外,还解决了许多
极端情况下的崩溃问题,我们现在确保
始终以正确的顺序打印复合选择器,以形成有效的CSS选择器。
已对正在进行的LibSass重构进行了一些改进,并进行了重新移植,并添加了新的优化的内存分配器
,尽管暂时默认情况下它是禁用的(编译时间选项)。
现在,最终加载的源由引用计数的对象处理,因此我们可以更轻松地
保证此信息的生命周期,以便进行错误报告,而无需进行复制。
修复了如下bug:
changelog:
Fix parenthesization for selector schema and real parents
Add deprecation warning for global variable creation
Ensure correct output order of compound selectors
Handle loaded source code as shared objects
New custom memory allocator - disabled for now
Add back C-API getters for plugin paths
Fix abspath handling on windows without directory
Fix various edge case crashes
Fix segfault on directive ruleset
Fix heap-buffer-overflow in lexer
Fix stack-overflow in parser
Fix memory leak in parser
Fix memory leak in evaluation
Fix memory handling edge case
Fix some null pointer access crashes
Preparations for ongoing refactoring
3.ABI差异:
---------------diffs in libsass_libsass.so.1.0.0_abidiff.out:----------------
Functions changes summary: 44 Removed, 37 Changed (1455 filtered out), 51 Added functions
Variables changes summary: 0 Removed, 0 Changed (149 filtered out), 0 Added variable
删除的函数44个
[D] 'method Sass::Include::Include(const Sass::Importer&, Sass::sass::string)'
[D] 'method const char* Sass::Parser::lexSass::Prelexer::optional_spaces(bool, bool)'
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::exactly<' '>, Sass::Prelexer::exactly<'\011'>, Sass::Prelexer::line_comment, Sass::Prelexer::block_comment,
Sass::Prelexer::delimited_by<(& Sass::Constants::slash_star), (& Sass::Constants::star_slash), false> >(const char*)'
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::exactly<'}'>, Sass::Prelexer::end_of_file>(const char*)'
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::hexa, Sass::Prelexer::exactly<'|'>, Sass::Prelexer::sequence<Sass::Prelexer::number, Sass::Prelexer::unit_identifier>,
Sass::Prelexer::number, Sass::Prelexer::sequence<Sass::Prelexer::exactly<'!'>, Sass::Prelexer::word<(& Sass::Constants::important_kwd)> > >(const char*)'
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::identifier, Sass::Prelexer::exactly<'-'> >(const char*)'
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::schema_reference_combinator, Sass::Prelexer::class_char<(& Sass::Constants::selector_lookahead_ops)>,
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::sequence<Sass::Prelexer::ampersand, Sass::Prelexer::one_plus<Sass::Prelexer::exactly<'-'> >,
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::sequence<Sass::Prelexer::exactly<'/'>,
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::sequence<Sass::Prelexer::negateSass::Prelexer::uri_prefix,
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::word<(& Sass::Constants::debug_kwd)>, Sass::Prelexer::word<(& Sass::Constants::warn_kwd)>,
[D] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::word<(& Sass::Constants::import_kwd)>, Sass::Prelexer::word<(& Sass::Constants::media_kwd)>,
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::W, Sass::Prelexer::exactly<')'> >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'#'>, Sass::Prelexer::one_plusSass::Prelexer::xdigit >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'('>, Sass::Prelexer::skip_over_scopes<Sass::Prelexer::exactly<'('>, Sass::Prelexer::exactly<')'> > >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<''>, Sass::Prelexer::one_unit>(const char)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'-'>, Sass::Prelexer::one_plusSass::Prelexer::alpha >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'-'>, Sass::Prelexer::optional_spaces>(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'.'>, Sass::Prelexer::alternatives<Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier> >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'\'>, Sass::Prelexer::any_char>(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'\'>, Sass::Prelexer::re_linebreak>(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::exactly<'u'>, Sass::Prelexer::exactly<'r'>, Sass::Prelexer::exactly<'l'>,
Sass::Prelexer::exactly<'('>, Sass::Prelexer::zero_plus<Sass::Prelexer::alternatives<Sass::Prelexer::class_char<(& Sass::Constants::real_uri_chars)>,
Sass::Prelexer::uri_character, Sass::Prelexer::NONASCII, Sass::Prelexer::ESCAPE> >, Sass::Prelexer::exactly<')'> >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::negate<Sass::Prelexer::sequence<Sass::Prelexer::exactly<(& Sass::Constants::url_kwd)>,
Sass::Prelexer::exactly<'('> > >, Sass::Prelexer::neg_class_char<(& Sass::Constants::almost_any_value_class)> >(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::optional<Sass::Prelexer::exactly<'$'> >, Sass::Prelexer::identifier>(const char*)'
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::optional<Sass::Prelexer::sequence<Sass::Prelexer::alternatives<Sass::Prelexer::variable,
[D] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::word<(& Sass::Constants::progid_kwd)>, Sass::Prelexer::exactly<':'>,
[D] 'method void std::_Hashtable<Sass::SharedImplSass::Expression, std::pair<const Sass::SharedImplSass::Expression,
[D] 'method std::_Hashtable<Sass::SharedImplSass::Expression, std::pair<const Sass::SharedImplSass::Expression, Sass::SharedImplSass::Expression >,
[D] 'method std::pair<std::__detail::_Node_iterator<Sass::SharedImplSass::SimpleSelector, true, true>, bool> std::_Hashtable<Sass::SharedImplSass::SimpleSelector,
[D] 'method std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, Sass::ordered_map<Sass::SharedImplSass::ComplexSelector,
[D] 'method std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > >, std::allocator<std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::iterator std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > >, std::allocator<std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_insert_unique_node(std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > >, std::allocator<std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::size_type, std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > >, std::allocator<std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::__hash_code, std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > >, std::allocator<std::pair<const Sass::SharedImplSass::SimpleSelector, std::unordered_set<Sass::SharedImplSass::SelectorList, Sass::ObjPtrHash, Sass::ObjPtrEquality, std::allocator<Sass::SharedImplSass::SelectorList > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::__node_type*)'
[D] 'method std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::iterator std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_insert_unique_node(std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::size_type, std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::__hash_code, std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::_Select1st, std::equal_to, std::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::__node_type*)'
[D] 'method Sass::SharedImplSass::SimpleSelector* std::__copy_move_backward<true, false, std::random_access_iterator_tag>::__copy_move_b<Sass::SharedImplSass::SimpleSelector*,
[D] 'method std::__cxx11::basic_string<char, std::char_traits, std::allocator >& std::__cxx11::basic_string<char,
[D] 'method Sass::Include* std::__uninitialized_copy::__uninit_copy<__gnu_cxx::__normal_iterator<Sass::Include*, std::vector<Sass::Include, std::allocatorSass::Include > >,
[D] 'method std::vector<Sass::Extension, std::allocatorSass::Extension >* std::__uninitialized_copy::__uninit_copy<std::move_iterator<std::vector<Sass::Extension, std::allocatorSass::Extension >>,
std::vector<Sass::Extension, std::allocatorSass::Extension >>(std::move_iterator<std::vector<Sass::Extension, std::allocatorSass::Extension >>, std::vector<Sass::Extension, std::allocatorSass::Extension >)'
[D] 'method void std::vector<Sass::Backtrace, std::allocatorSass::Backtrace >::pop_back()'
[D] 'method std::vector<Sass::Operand, std::allocatorSass::Operand >::reference std::vector<Sass::Operand, std::allocatorSass::Operand >::operator[](std::vector<Sass::Operand, std::allocatorSass::Operand >::size_type)'
[D] 'method std::vector<Sass::SharedImplSass::PreValue, std::allocator<Sass::SharedImplSass::PreValue > >::reference std::vector<Sass::SharedImplSass::PreValue,
std::allocator<Sass::SharedImplSass::PreValue > >::operator[](std::vector<Sass::SharedImplSass::PreValue, std::allocator<Sass::SharedImplSass::PreValue > >::size_type)'
[D] 'method std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > >::iterator std::vector<Sass::SharedImplSass::SelectorComponent,
[D] 'method std::vector<Sass::SharedImplSass::SimpleSelector, std::allocator<Sass::SharedImplSass::SimpleSelector > >::iterator std::vector<Sass::SharedImplSass::SimpleSelector
[D] 'method void std::vector<std::vector<Sass::SharedImplSass::ComplexSelector, std::allocator<Sass::SharedImplSass::ComplexSelector > >, std::allocator<std::vector<Sass::SharedImplSass::ComplexSelector,
[D] 'method void std::vector<std::vector<Sass::SharedImplSass::ComplexSelector, std::allocator<Sass::SharedImplSass::ComplexSelector > >, std::allocator<std::vector<Sass::SharedImplSass::ComplexSelector,
新增函数51个
[A] 'method Sass::Hashed<Sass::SharedImplSass::Expression, Sass::SharedImplSass::Expression, Sass::SharedImplSass::Map >& Sass::Hashed<Sass::SharedImplSass::Expression,
Sass::SharedImplSass::Expression, Sass::SharedImplSass::Map >::operator+=(Sass::Hashed<Sass::SharedImplSass::Expression, Sass::SharedImplSass::Expression, Sass::SharedImplSass::Map >*)'
[A] 'method const char* Sass::Parser::lex<Sass::Prelexer::exactly<'-'> >(bool, bool)'
[A] 'method const char* Sass::Parser::lex<Sass::Prelexer::exactly<'/'> >(bool, bool)'
[A] 'method const char* Sass::Parser::lex<Sass::Prelexer::exactly<(& Sass::Constants::else_kwd)> >(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::hexa(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_at_root(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_content_directive(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_extend(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_false(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_import(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_include_directive(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_media(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_null(bool, bool)'
[A] 'method const char* Sass::Parser::lexSass::Prelexer::kwd_return_directive(bool, bool)'
[A] 'method const char* Sass::Parser::lex<Sass::Prelexer::sequence<Sass::Prelexer::alternatives<Sass::Prelexer::hex, Sass::Prelexer::hex0>, Sass::Prelexer::negate<Sass::Prelexer::exactly<'-'> > > >(bool, bool)'
[A] 'method const char* Sass::Parser::lex<Sass::Prelexer::sequenceSass::Prelexer::kwd_not >(bool, bool)'
[A] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::identifier, Sass::Prelexer::variable, Sass::Prelexer::percentage, Sass::Prelexer::binomial, Sass::Prelexer::dimension,
Sass::Prelexer::alnum>(const char*)'
[A] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::interpolant, Sass::Prelexer::space, Sass::Prelexer::sequence<Sass::Prelexer::exactly<'u'>,
Sass::Prelexer::exactly<'r'>, Sass::Prelexer::exactly<'l'>, Sass::Prelexer::exactly<'('>, Sass::Prelexer::zero_plus<Sass::Prelexer::alternatives<Sass::Prelexer::class_char<(& Sass::Constants::real_uri_chars)>, Sass::Prelexer::uri_character, Sass::Prelexer::NONASCII, Sass::Prelexer::ESCAPE> >, Sass::Prelexer::exactly<')'> > >(const char*)' {ZN4Sass8Prelexer12alternativesIXadL_ZNS0_11interpolantEPKcEEXadL_ZNS0_5spaceES3_EEJXadL_ZNS0_8sequenceIXadL_ZNS0_7exactlyILc117EEES3_S3_EEXadL_ZNS5_ILc114EEES3_S3_EEJXadL_ZNS5_ILc108EEES3_S3_EEXadL_ZNS5_ILc40EEES3_S3_EEXadL_ZNS0_9zero_plusIXadL_ZNS1_IXadL_ZNS0_10class_charIXadL_ZNS_9Constants14real_uri_charsEEEEES3_S3_EEXadL_ZNS0_13uri_characterES3_EEJXadL_ZNS0_8NONASCIIES3_EEXadL_ZNS0_6ESCAPEES3_EEEEES3_S3_EEEES3_S3_EEXadL_ZNS5_ILc41EEES3_S3_EEEEES3_S3_EEEEES3_S3}
[A] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::line_comment, Sass::Prelexer::block_comment, Sass::Prelexer::delimited_by<(& Sass::Constants::slash_star),
(& Sass::Constants::star_slash), false> >(const char*)'
[A] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::sequence<Sass::Prelexer::negate<Sass::Prelexer::sequence<Sass::Prelexer::exactly<(& Sass::Constants::url_kwd)>,
[A] 'function const char* Sass::Prelexer::alternatives<Sass::Prelexer::word<(& Sass::Constants::while_kwd)>, Sass::Prelexer::word<(& Sass::Constants::if_kwd)>,
[A] 'function const char* Sass::Prelexer::one_plusSass::Prelexer::alpha(const char*)'
[A] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::alternatives<Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier>,
Sass::Prelexer::zero_plus<Sass::Prelexer::sequence<Sass::Prelexer::exactly<'.'>, Sass::Prelexer::alternatives<Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier> > >,
Sass::Prelexer::zero_plus<Sass::Prelexer::sequence<Sass::Prelexer::exactly<'('>, Sass::Prelexer::optional_css_whitespace,
Sass::Prelexer::optional<Sass::Prelexer::sequence<Sass::Prelexer::alternatives<Sass::Prelexer::variable, Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier>,
Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::exactly<'='>, Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::alternatives<Sass::Prelexer::variable,
Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier, Sass::Prelexer::quoted_string, Sass::Prelexer::number, Sass::Prelexer::hex, Sass::Prelexer::hexa>,
Sass::Prelexer::zero_plus<Sass::Prelexer::sequence<Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::exactly<','>, Sass::Prelexer::optional_css_whitespace,
Sass::Prelexer::sequence<Sass::Prelexer::alternatives<Sass::Prelexer::variable, Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier>,
Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::exactly<'='>, Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::alternatives<Sass::Prelexer::variable,
Sass::Prelexer::identifier_schema, Sass::Prelexer::identifier, Sass::Prelexer::quoted_string, Sass::Prelexer::number, Sass::Prelexer::hex, Sass::Prelexer::hexa> > > > > >,
Sass::Prelexer::optional_css_whitespace, Sass::Prelexer::exactly<')'> > > >(const char*)'
[A] 'function const char* Sass::Prelexer::sequence<Sass::Prelexer::identifier, Sass::Prelexer::zero_plusSass::Prelexer::block_comment >(const char*)'
[A] 'method void Sass::ordered_map<Sass::SharedImplSass::ComplexSelector, Sass::Extension, Sass::ObjHash, Sass::ObjEquality, std::allocator<std::pair<const Sass::SharedImplSass::ComplexSelector,
Sass::Extension> > >::insert(const Sass::SharedImplSass::ComplexSelector&, const Sass::Extension&)'
[A] 'method std::pair<std::__detail::_Node_iterator<Sass::SharedImplSass::ComplexSelector, true, true>, bool> std::_Hashtable<Sass::SharedImplSass::ComplexSelector,
Sass::SharedImplSass::ComplexSelector, std::allocator<Sass::SharedImplSass::ComplexSelector >,
std::__detail::_Identity, Sass::ObjPtrEquality, Sass::ObjPtrHash, std::__detail::_Mod_range_hashing,
std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::_M_insert<const Sass::SharedImplSass::ComplexSelector&,
std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<Sass::SharedImplSass::ComplexSelector, true> > > >(const Sass::SharedImplSass::ComplexSelector&,
const std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<Sass::SharedImplSass::ComplexSelector, true> > >&,
std::true_type, std::_Hashtable<Sass::SharedImplSass::ComplexSelector, Sass::SharedImplSass::ComplexSelector,
std::allocator<Sass::SharedImplSass::ComplexSelector >, std::__detail::_Identity,
Sass::ObjPtrEquality, Sass::ObjPtrHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy,
std::__detail::_Hashtable_traits<true, true, true> >::size_type)'
[A] 'method void std::_Hashtable<Sass::SharedImplSass::Expression, std::pair<const Sass::SharedImplSass::Expression,
Sass::SharedImplSass::Expression >, std::allocator<std::pair<const Sass::SharedImplSass::Expression,
Sass::SharedImplSass::Expression > >, std::__detail::_Select1st, Sass::ObjEquality,
Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash,
[A] 'method void std::_Hashtable<Sass::SharedImplSass::Expression, std::pair<const Sass::SharedImplSass::Expression, Sass::SharedImplSass::Expression >,
std::allocator<std::pair<const Sass::SharedImplSass::Expression, Sass::SharedImplSass::Expression > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash,
std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy,
[A] 'method std::pair<std::__detail::_Node_iterator<Sass::SharedImplSass::SimpleSelector, true, true>, bool> std::_Hashtable<Sass::SharedImplSass::SimpleSelector, KS3_NS5_10_AllocNodeISaINS5_10_Hash_nodeIS3_Lb1EEEEEEEESt4pairINS5_14_Node_iteratorIS3_Lb1ELb1EEEbEOT_RKT0_St17integral_constantIbLb1EEm}
[A] 'method std::_Hashtable<Sass::SharedImplSass::SimpleSelector, std::pair<const Sass::SharedImplSass::SimpleSelector, Sass::ordered_map<Sass::SharedImpl<Sass::Cosh, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::_M_insert_unique_node(std::_Hashtable<Sass::SharedImplSass::SimpleSelector, ::ObjHash, Sass::ObjEquality, std::allocator<std::pair<const Sass::SharedImplSass::ComplexSelector, Sass::Extension> > > > >, std::__detail::_Select1st, Sass::ObjEquality, Sass::ObjHash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, false, true> >::size_type, std::_Hashtable<Sass::SharedImplSass::SimpleSelector,
[A] 'method void std::_Hashtable<int, std::pair<int const, char const*>, std::allocator<std::pair<int const, char const*> >, std::__detail::Select1st, std::equal_to<ilt_ranged_hashENS6_20_Prime_rehash_policyENS6_17_Hashtable_traitsILb0ELb0ELb1EEEEC2IPKS4_EET_SL_mRKSB_RKSC_RKSD_RKS9_RKS7_RKS5, aliases _ZNSt10_HashtableIiSt4pairIKiPKcESaIS4_ENSt8__detail10_Select1stESt8equal_toIiESt4hashIiENS6_18_Mod_range_has
[A] 'method std::pair<std::_Rb_tree_iterator<std::pair<const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, Sass::StyleSheet> >, bool
[A] 'method std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_tr_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, Sass::SharedImplSass::AST_Node >, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::charing<char, std::char_traits, std::allocator >&>&&, std::tuple<>&&)' {ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4Sass10SharedImplINS8_8AST_NodeEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEESt17_Rb_tree_iteratorISC_ESt23_Rb_tree_const_iteratorISC_EDpOT}
[A] 'method std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_tits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, Sass::SharedImplSass::AST_Node >, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, std::char_trastd::char_traits, std::allocator >&&>&&, std::tuple<>&&)' {ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4Sass10SharedImplINS8_8AST_NodeEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJOS5_EESN_IJEEEEESt17_Rb_tree_iteratorISC_ESt23_Rb_tree_const_iteratorISC_EDpOT}
[A] 'method std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_td::char_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, Sass::SharedImplSass::Parameter >, std::_Select1st<std::pair<const std::__cxx11::basic_string<char, s:basic_string<char, std::char_traits, std::allocator >&>&&, std::tuple<>&&)' {ZNSt8_Rb_treeINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt4pairIKS5_N4Sass10SharedImplINS8_9ParameterEEEESt10_Select1stISC_ESt4lessIS5_ESaISC_EE22_M_emplace_hint_uniqueIJRKSt21piecewise_construct_tSt5tupleIJRS7_EESN_IJEEEEESt17_Rb_tree_iteratorISC_ESt23_Rb_tree_const_iteratorISC_EDpOT}
[A] 'method std::_Rb_tree<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::pair<const std::__cxx11::basic_string<char, std::char_t__cxx11::basic_string<char, std::char_traits, std::allocator >, int> >, std::less<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<const std::__cxx11::basic_string<char, std::EESJ_IJEEEEESt17_Rb_tree_iteratorIS8_ESt23_Rb_tree_const_iteratorIS8_EDpOT}
[A] 'method void std::__cxx11::basic_string<char, std::char_traits, std::allocator >::_M_construct<char const*>(const char*, const char*, std::forward_iter
[A] 'method void std::__cxx11::basic_string<char, std::char_traits, std::allocator >::_M_construct<char*>(char*, char*, std::forward_iterator_tag)' {_ZN
[A] 'method std::__cxx11::basic_string<char, std::char_traits, std::allocator >::pointer std::__cxx11::basic_string<char, std::char_traits, std::allo
[A] 'function void std::__final_insertion_sort<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string, std::vector<std::__cxx11::basic_string, std::allocator<std::__cxx11::basic_string > > >, __gnu_cxx::__ops::_Iter_less_iter>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::vector<std::_cxx11::basic_string<char, std::char>, std::allocator > > > >, __gnu_cxx::__ops::_Iter_less_iter)' {ZSt22__final_insertion_sortIN9__gnu_cxx17__normal_iteratorIPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt6vectorIS7_SaIS7_EEEENS0_5__ops15_Iter_less_iterEEvT_SF_T0}
[A] 'function bool std::__lexicographical_compare_impl<const std::__cxx11::basic_string, const std::__cxx11::basic_string, __gnu_cxx::__ops::_Iter_less_iter>(const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, const std::__cxx11::basic_string<char, std::char_traits, std::allocator >, const std::__cxx11::basic_string<char, std::char_traits, st
[A] 'function void std::__unguarded_linear_insert<__gnu_cxx::__normal_iterator<std::__cxx11::basic_string, std::vector<std::__cxx11::basic_string, std::allocator<std::__cxx11::basic_string > > >, __gnu_cxx::__ops::_Val_less_iter>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::vector<std::__cxx11::basic_string<char, std::cha
[A] 'method void std::mersenne_twister_engine<long unsigned int, 32, 624, 397, 31, 2567483615, 11, 4294967295, 7, 2636928640, 15, 4022730752, 18, 1812433253>::_M_gen_rand()' {_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EE11_M_gen_randEv}
[A] 'method void std::vector<Sass::SharedImplSass::Argument, std::allocator<Sass::SharedImplSass::Argument > >::_M_insert_aux<Sass::SharedImplSass::Argument >(std::vector<Sass::SharedImplSass::Argument, std::allocator<Sass::SharedImplSass::Argument > >::iterator, Sass::SharedImplSass::Argument&&)' {_ZNSt6vectorIN4Sass10SharedImplINS0_8ArgumentEEESaIS3_EE13_M_insert_auxIS3_EEvN9__gnu_cxx17__norma
[A] 'method void std::vector<Sass::SharedImplSass::ComplexSelector, std::allocator<Sass::SharedImplSass::ComplexSelector > >::_M_insert_aux<Sass::SharedImplSass::ComplexSelector >(std::vector<Sass::SharedImplSass::ComplexSelector, std::allocator<Sass::SharedImplSass::ComplexSelector > >::iterator, Sass::SharedImplSass::ComplexSelector&&)' {_ZNSt6vectorIN4Sass10SharedImplINS0_15ComplexSelectorEEE
[A] 'method void std::vector<Sass::SharedImplSass::Expression, std::allocator<Sass::SharedImplSass::Expression > >::_M_insert_aux<Sass::SharedImplSass::Expression >(std::vector<Sass::SharedImplSass::Expression, std::allocator<Sass::SharedImplSass::Expression > >::iterator, Sass::SharedImplSass::Expression&&)' {_ZNSt6vectorIN4Sass10SharedImplINS0_10ExpressionEEESaIS3_EE13_M_insert_auxIS3_EEvN9__g
[A] 'method void std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > >::_M_insert_aux<Sass::SharedImplSass::SelectorComponent >(std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > >::iterator, Sass::SharedImplSass::SelectorComponent&&)' {_ZNSt6vectorIN4Sass10SharedImplINS0_17Select
[A] 'method void std::vector<Sass::SharedImplSass::SimpleSelector, std::allocator<Sass::SharedImplSass::SimpleSelector > >::_M_insert_aux<Sass::SharedImplSass::SimpleSelector >(std::vector<Sass::SharedImplSass::SimpleSelector, std::allocator<Sass::SharedImplSass::SimpleSelector > >::iterator, Sass::SharedImplSass::SimpleSelector&&)' {_ZNSt6vectorIN4Sass10SharedImplINS0_14SimpleSelectorEEESaIS3_E
[A] 'method void std::vector<char, std::allocator >::_M_realloc_insert<char const&>(std::vector<char, std::allocator >::iterator, const char&)' {ZNSt6vectorIcSaIcEE17_M_realloc_insertIJRKcEEEvN9__gnu_cxx17__normal_iteratorIPcS1_EEDpOT}
[A] 'method void std::vector<std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > >, std::allocator<std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > > > >::M_insert_aux<std::vector<Sass::SharedImplSass::SelectorComponent, std::allocator<Sass::SharedImplSass::SelectorComponent > > >S_IN4Sass10SharedImplINS0_17SelectorComponentEEESaIS3_EESaIS5_EE13_M_insert_auxIS5_EEvN9__gnu_cxx17__normal_iteratorIPS5_S7_EEOT}
头文件变更:
Sass::CastSass::CssMediaRule(Sass::AST_Node*)返回值类型为class Sass::CssMediaRule;
stl_vector.h文件:
struct std::_Vector_base<long unsigned int, std::allocator
删除3个成员:
'std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::pointer std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::_Vector_impl::_M_start', at offset 0 (in bits) at stl_vector.h:84:1
'std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::pointer std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::_Vector_impl::_M_finish', at offset 64 (in bits) at stl_vector.h:85:1
'std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::pointer std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::_Vector_impl::_M_end_of_storage', at offset 128 (in bits) at stl_vector.h:86:1
新增1个基类 :
struct std::_Vector_base<Sass::SharedImplSass::CssMediaQuery, std::allocator<Sass::SharedImplSass::CssMediaQuery > >::_Vector_impl_data at stl_vector.h:88:1
1个成员函数变化:
'method virtual Sass::CssMediaRule* Sass::CssMediaRule::copy()' has some sub-type changes:
return type changed:
pointed to type 'class Sass::CssMediaRule' changed; details are being reported
virtual Sass::Definition* Sass::Definition::copy()函数返回类型变更;
Sass::Context* Sass_Compiler::cpp_ctx类成员变化;
Sass::sass::vector Sass::SourceMap::mappings类成员变化,新增1个基类,删除3个成员;
Sass::Inspect::operator()(Sass::CssMediaQuery*)方法返回值类型变更;
Sass::Inspect::operator()(Sass::Import*)方法返回值类型变更;
Sass::sass::vector Sass::Import::incs_类新增一个基类,删除3个成员;
Sass::Inspect::operator()(Sass::EachRule*)方法返回值类型变更;
Sass::Inspect::operator()(Sass::EachRule*)新增1个基类,删除3个成员;
Sass::String_Schema* Sass::String_Schema::copy()方法返回值类型变更;
Sass::Vectorized<Sass::SharedImplSass::Media_Query_Expression >类成员变化;
Sass::sass::vector Sass::Context::callee_stack
Sass::Extender Sass::Context::extender
Sass::ordered_map<Sass::SharedImplSass::SelectorList
Sass::sass::vector Sass::Context::c_headers'
Sass::sass::vector Sass::Context::c_functions
类中均新增一个基类,删除3个成员;
引入了新的类和成员,变更加大,用户若使用需要适配。
当前openeuler中sassc包会依赖此包,使用3.6.4的libsass包作为依赖编译sassc包后,安装使用均正常,此次升级对于其他包无影响
登录 后才可以发表评论