Fix Mismatched free (iri_t)
authorJihoon Chung <jihoon.chung@samsaung.com>
Fri, 25 Oct 2013 01:38:35 +0000 (10:38 +0900)
committerSoo-Hyun Choi <sh9.choi@samsung.com>
Fri, 25 Oct 2013 03:58:17 +0000 (12:58 +0900)
[Issue#]   LINUXWRT-1065
[Problem]  As a result of valgrind, memory mismatched free detected.
[Cause]    Iri data structure, "iri_t", should be alloc by iri_parse and released by iri_destory.
           Some part doesn't use "iri_destory" when release "iri_t".
[Solution] Change use case from DPL::ScropedPtr to unique_ptr with deleter(iri_destory).

[Verification] Retest valgrind.
[SCMRequest] N/A

Change-Id: Icbd1e741a1a6545980afc8e4650767309fdf14e1

src/configuration_parser/widget_parser.cpp

index e8b832d..e00b84e 100644 (file)
  * @brief
  */
 #include <widget_parser.h>
+
+#include <algorithm>
+#include <cerrno>
+#include <climits>
+#include <cmath>
+#include <cstdlib>
+#include <cstdio>
+#include <locale>
+#include <memory>
+#include <string>
+
+#include <iri.h>
+#include <pcrecpp.h>
+
 #include <ignoring_parser.h>
 #include <deny_all_parser.h>
 #include <dpl/wrt-dao-ro/config_parser_data.h>
 #include <dpl/utils/mime_type_utils.h>
 #include <language_subtag_rst_tree.h>
 
-#include <iri.h>
 #include <dpl/fast_delegate.h>
 #include <dpl/foreach.h>
-#include <dpl/scoped_ptr.h>
-#include <pcrecpp.h>
-#include <algorithm>
-#include <string>
-#include <cstdio>
-#include <cerrno>
-#include <climits>
-#include <cmath>
-#include <cstdlib>
-#include <locale>
 
 #include <installer_log.h>
 
@@ -2244,7 +2247,7 @@ class AllowNavigationParser : public ElementParser
                 continue;
             }
 
-            DPL::ScopedPtr<iri_t> iri(iri_parse(origin.c_str()));
+            std::unique_ptr<iri_t, decltype(&iri_destroy)> iri(iri_parse(origin.c_str()), iri_destroy);
             if (!iri->host || strlen(iri->host) == 0) {
                 // input origin should has schem and host
                 // in case of file scheme path is filled