@@ -58,6 +58,15 @@ static inline void rtrim(string &s)
5858}
5959
6060
61+ static size_t TotalStringSize (const _STD_VECTOR<_STD_STRING>& v)
62+ {
63+ size_t n = 0 ;
64+ for (const auto & s : v)
65+ n += s.size ();
66+ return n;
67+ }
68+
69+
6170static string GetTemplateString (const vector<string>& args)
6271{
6372 // Pre-calculate total length to avoid reallocations
@@ -2074,7 +2083,7 @@ DemangledTypeNode DemangleGNU3::DemangleNestedName(bool* allTypeTemplateArgs)
20742083 newName.reserve (aNames.size () + bNames.size ());
20752084 newName.insert (newName.end (), aNames.begin (), aNames.end ());
20762085 newName.insert (newName.end (), bNames.begin (), bNames.end ());
2077- if ([&]{ size_t n = 0 ; for ( const auto & s : newName) n += s. size (); return n; }( ) > MAX_DEMANGLE_LENGTH)
2086+ if (TotalStringSize ( newName) > MAX_DEMANGLE_LENGTH)
20782087 throw DemangleException (" Detected adversarial mangled string" );
20792088 type.SetNTR (type.GetNTRClass (), newName);
20802089 type.SetHasTemplateArguments (false );
@@ -2174,7 +2183,7 @@ DemangledTypeNode DemangleGNU3::DemangleLocalName()
21742183 newName.reserve (aNames.size () + bNames.size ());
21752184 newName.insert (newName.end (), aNames.begin (), aNames.end ());
21762185 newName.insert (newName.end (), bNames.begin (), bNames.end ());
2177- if ([&]{ size_t n = 0 ; for ( const auto & s : newName) n += s. size (); return n; }( ) > MAX_DEMANGLE_LENGTH)
2186+ if (TotalStringSize ( newName) > MAX_DEMANGLE_LENGTH)
21782187 throw DemangleException (" Detected adversarial mangled string" );
21792188 type.SetTypeName (std::move (newName));
21802189 type.SetConst (tmpType.IsConst ());
@@ -2791,6 +2800,8 @@ DemangledTypeNode DemangleGNU3::DemangleSymbol(QualifiedName& varName)
27912800 m_functionSubstitute.pop_back ();
27922801 m_isParameter = false ;
27932802 type = DemangledTypeNode::FunctionType (std::move (returnType), nullptr , std::move (params));
2803+ if (isReturnTypeUnknown)
2804+ type.SetReturnTypeConfidence (BN_MINIMUM_CONFIDENCE);
27942805
27952806 type.SetPointerSuffix (suffix);
27962807 type.SetConst (cnst);
0 commit comments