From 21324fa57b44ba77e46be4952a02484cb8c3ef5c Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 4 Nov 2025 19:23:44 -0500 Subject: Remove indenting APIs from Logger. These are thread unsafe by design. Loggers are not owned by a specific thread and many are used by multiple threads. The indenting APIs could not be made to be thread safe in any way as they exist, so they have been removed. The data races caused by the indenting APIs are actually an important stability issue that could cause the indentation level to go out of bounds and crash the product. If you were using the indentation APIs, you will need to rewrite the usage to manually manage the indentation level in a thread safe way. --- demangler/msvc/demangle_msvc.cpp | 52 ++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 26 deletions(-) (limited to 'demangler/msvc/demangle_msvc.cpp') diff --git a/demangler/msvc/demangle_msvc.cpp b/demangler/msvc/demangle_msvc.cpp index c82d816a..cabee544 100644 --- a/demangler/msvc/demangle_msvc.cpp +++ b/demangler/msvc/demangle_msvc.cpp @@ -162,7 +162,7 @@ Demangle::Demangle(Architecture* arch, string mangledName) : m_view(nullptr) { m_logger = LogRegistry::CreateLogger("MSVCDemangle"); - m_logger->ResetIndent(); + //m_logger->ResetIndent(); } @@ -173,7 +173,7 @@ Demangle::Demangle(Ref platform, string mangledName) : m_view(nullptr) { m_logger = LogRegistry::CreateLogger("MSVCDemangle"); - m_logger->ResetIndent(); + //m_logger->ResetIndent(); } @@ -186,7 +186,7 @@ Demangle::Demangle(Ref view, string mangledName) : throw DemangleException(); m_arch = m_platform->GetArchitecture(); m_logger = LogRegistry::CreateLogger("MSVCDemangle"); - m_logger->ResetIndent(); + //m_logger->ResetIndent(); } @@ -293,9 +293,9 @@ TypeBuilder Demangle::DemangleVarType(BackrefList& varList, bool isReturn, Quali case 'O': { QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); auto childType = DemangleVarType(varList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); newType = TypeBuilder::ArrayType(childType.Finalize(), 0); break; } @@ -340,9 +340,9 @@ TypeBuilder Demangle::DemangleVarType(BackrefList& varList, bool isReturn, Quali reader.Consume(2); DemangleModifiers(_const, _volatile, isMember); QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); newType = DemangleVarType(varList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); newType.SetConst(_const); newType.SetVolatile(_volatile); return newType; @@ -467,9 +467,9 @@ TypeBuilder Demangle::DemangleVarType(BackrefList& varList, bool isReturn, Quali elementList.push_back(element); } QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); child = DemangleVarType(varList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); for (auto i = elementList.rbegin(); i != elementList.rend(); i++) { @@ -479,9 +479,9 @@ TypeBuilder Demangle::DemangleVarType(BackrefList& varList, bool isReturn, Quali else { QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); child = DemangleVarType(varList, true, name); - m_logger->Dedent(); + //m_logger->Dedent(); } child.SetConst(_const2); @@ -501,17 +501,17 @@ TypeBuilder Demangle::DemangleVarType(BackrefList& varList, bool isReturn, Quali } case EnumerationTypeClass: m_logger->LogDebug("Demangle enumeration\n"); - m_logger->Indent(); + //m_logger->Indent(); DemangleName(typeName, classFunctionType, varList); - m_logger->Dedent(); + //m_logger->Dedent(); newType = TypeBuilder::NamedType(NamedTypeReference::GenerateAutoDemangledTypeReference(EnumNamedTypeClass, typeName), width, width); break; case StructureTypeClass: m_logger->LogDebug("Demangle structure\n"); - m_logger->Indent(); + //m_logger->Indent(); DemangleName(typeName, classFunctionType, varList); - m_logger->Dedent(); + //m_logger->Dedent(); switch (structType) { case ClassStructureType: @@ -721,9 +721,9 @@ void Demangle::DemangleVariableList(vector& paramList, Backre FunctionParameter vt; QualifiedName name; m_logger->LogDebug("Argument %d: %s", i, reader.GetRaw()); - m_logger->Indent(); + //m_logger->Indent(); TypeBuilder type = DemangleVarType(varList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); if (hasModifiers) { type.SetConst(_const); @@ -820,9 +820,9 @@ void Demangle::DemangleNameTypeRtti(BNNameType& classFunctionType, DemangleModifiers(_const, _volatile, isMember); QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); rtti = DemangleVarType(nameBackrefList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); rtti.SetConst(_const); rtti.SetVolatile(_volatile); rtti.SetPointerSuffix(suffix); @@ -991,9 +991,9 @@ string Demangle::DemangleTemplateInstantiationName(BackrefList& nameBackrefList) string Demangle::DemangleTemplateParams(vector& params, BackrefList& nameBackrefList, string& out) { - m_logger->Indent(); + //m_logger->Indent(); DemangleVariableList(params, nameBackrefList); - m_logger->Dedent(); + //m_logger->Dedent(); m_logger->LogDebug("VariableList done\n"); out += "<"; for (size_t i = 0; i < params.size(); i++) @@ -1564,10 +1564,10 @@ TypeBuilder Demangle::DemangleFunction(BNNameType classFunctionType, bool pointe QualifiedName name; m_logger->LogDebug("Demangle function return type %s", reader.GetRaw()); - m_logger->Indent(); + //m_logger->Indent(); returnType = DemangleVarType(nameBackrefList, true, name); m_logger->LogDebug("Return type: %s", returnType.GetString().c_str()); - m_logger->Dedent(); + //m_logger->Dedent(); if (hasModifiers) { returnType.SetConst(return_const); @@ -1641,9 +1641,9 @@ TypeBuilder Demangle::DemangleData() m_logger->LogDebug("%s: '%s'\n", __FUNCTION__, reader.GetRaw()); bool _const = false, _volatile = false, isMember = false; QualifiedName name; - m_logger->Indent(); + //m_logger->Indent(); TypeBuilder newType = DemangleVarType(m_backrefList, false, name); - m_logger->Dedent(); + //m_logger->Dedent(); auto suffix = DemanglePointerSuffix(); DemangleModifiers(_const, _volatile, isMember); newType.SetConst(_const); @@ -1701,7 +1701,7 @@ TypeBuilder Demangle::DemangleVTable() Demangle::DemangleContext Demangle::DemangleSymbol() { m_logger->LogDebug("%s: '%s'\n", __FUNCTION__, reader.GetRaw()); - m_logger->Indent(); + //m_logger->Indent(); BNNameType classFunctionType = NoNameType; QualifiedName varName; -- cgit v1.3.1