From 10efbe6c5e9350b8683d5b79ca6b9c75d61131a2 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 29 Mar 2013 20:09:20 +0000 Subject: [PATCH] BRepositoryInfo::SetTo(): driver settings unloaded too early The string pointers retrieved from the driver settings are only valid until the settings handle is freed. The were also used afterwards, though. --- src/kits/package/RepositoryInfo.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/kits/package/RepositoryInfo.cpp b/src/kits/package/RepositoryInfo.cpp index 1ef4d40c4a..5dce7e1fa7 100644 --- a/src/kits/package/RepositoryInfo.cpp +++ b/src/kits/package/RepositoryInfo.cpp @@ -17,6 +17,7 @@ #include #include +#include #include @@ -182,6 +183,8 @@ BRepositoryInfo::SetTo(const BEntry& entry) void* settingsHandle = parse_driver_settings_string(configString.String()); if (settingsHandle == NULL) return B_BAD_DATA; + CObjectDeleter settingsHandleDeleter(settingsHandle, + &unload_driver_settings); const char* name = get_driver_parameter(settingsHandle, "name", NULL, NULL); const char* url = get_driver_parameter(settingsHandle, "url", NULL, NULL); @@ -194,8 +197,6 @@ BRepositoryInfo::SetTo(const BEntry& entry) const char* architectureString = get_driver_parameter(settingsHandle, "architecture", NULL, NULL); - unload_driver_settings(settingsHandle); - if (name == NULL || *name == '\0' || url == NULL || *url == '\0' || vendor == NULL || *vendor == '\0' || summary == NULL || *summary == '\0'