From 3fda6cfc7d73f13aaf4406ba2a87dc8471818e22 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 29 Nov 2022 14:10:28 -0500 Subject: generator.cpp: Use temporary Settings to prevent typeparser race --- python/generator.cpp | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) (limited to 'python') diff --git a/python/generator.cpp b/python/generator.cpp index 9dfd4f9e..25dfe5c2 100644 --- a/python/generator.cpp +++ b/python/generator.cpp @@ -240,20 +240,15 @@ int main(int argc, char* argv[]) string errors; auto arch = new CoreArchitecture(BNGetNativeTypeParserArchitecture()); - string oldParser; - if (Settings::Instance()->Contains("analysis.types.parserName")) - oldParser = Settings::Instance()->Get("analysis.types.parserName"); - // The clang type parser seems to work fine here, and is greatly preferred - // so we don't have to keep binaryninjacore.h CoreTypeParser compliant. - // Settings::Instance()->Set("analysis.types.parserName", "CoreTypeParser"); - + // Create temporary settings file so we don't clobber user settings when selecting a type parser + Ref tempFile = new TemporaryFile(); + FILE* f = fopen(tempFile->GetPath().c_str(), "wb"); + fprintf(f, "{}\n"); + fclose(f); + Settings::Instance()->LoadSettingsFile(tempFile->GetPath()); + Settings::Instance()->Set("analysis.types.parserName", "ClangTypeParser"); bool ok = arch->GetStandalonePlatform()->ParseTypesFromSourceFile(argv[1], types, vars, funcs, errors); - if (!oldParser.empty()) - Settings::Instance()->Set("analysis.types.parserName", oldParser); - else - Settings::Instance()->Reset("analysis.types.parserName"); - fprintf(stderr, "Errors: %s\n", errors.c_str()); if (!ok) return 1; -- cgit v1.3.1