pick fixes of crash (e.g. on first start in livecd)

This commit is contained in:
Mikhail Novosyolov 2024-02-13 11:24:05 +03:00
parent 007b0e55df
commit 0e0eb48be7
4 changed files with 681 additions and 1 deletions

View file

@ -0,0 +1,63 @@
From 7435d9c23a1d3bc138dcae0e05ea06fb244568fe Mon Sep 17 00:00:00 2001
From: psykose <alice@ayaya.dev>
Date: Thu, 8 Feb 2024 12:10:45 +0000
Subject: [PATCH] fix NULL passed to free with sqlite3 error_msg pointers
when an error does not happen, and an error_msg pointer is passed,
sqlite does not touch it. that means this pointer is uninitialised
(=NULL) which violates the constraints of g_autofree ("the variable must
be initialized").
this is then passed to g_free and crashes in tests.
use a regular pointer and free it manually on error, after sqlite writes
to it after setting it with sqlite_malloc.
fixes https://github.com/hughsie/colord/issues/163
---
src/cd-mapping-db.c | 3 ++-
src/cd-profile-db.c | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/cd-mapping-db.c b/src/cd-mapping-db.c
index 996f07e3..5ffd74dd 100644
--- a/src/cd-mapping-db.c
+++ b/src/cd-mapping-db.c
@@ -67,7 +67,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- g_autofree gchar *error_msg = NULL;
+ gchar *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -97,6 +97,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
if (rc != SQLITE_OK) {
/* Database appears to be mangled, so wipe it and try again */
sqlite3_close (priv->db);
+ sqlite3_free(error_msg);
priv->db = NULL;
if (retry) {
diff --git a/src/cd-profile-db.c b/src/cd-profile-db.c
index 57ab864f..e5b74e37 100644
--- a/src/cd-profile-db.c
+++ b/src/cd-profile-db.c
@@ -48,7 +48,7 @@ cd_profile_db_load (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
const gchar *statement;
- g_autofree gchar *error_msg = NULL;
+ gchar *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -69,6 +69,7 @@ cd_profile_db_load (CdProfileDb *pdb,
CD_CLIENT_ERROR_INTERNAL,
"Can't open database: %s\n",
sqlite3_errmsg (priv->db));
+ sqlite3_free (error_msg);
sqlite3_close (priv->db);
return FALSE;
}

View file

@ -21,7 +21,7 @@
Summary: Color daemon
Name: colord
Version: 1.4.7
Release: 2
Release: 3
License: GPLv2+ and LGPLv2+
Group: System/X11
Url: https://github.com/hughsie/colord
@ -29,6 +29,9 @@ Source0: http://www.freedesktop.org/software/colord/releases/%{name}-%{version}.
Source1: colord.sysusers
Patch1: https://github.com/hughsie/colord/commit/08a32b2379fb5582f4312e59bf51a2823df56276.patch
Patch2: https://github.com/hughsie/colord/commit/9283abd9c00468edb94d2a06d6fa3681cae2700d.patch
Patch3: https://github.com/hughsie/colord/commit/7435d9c23a1d3bc138dcae0e05ea06fb244568fe.patch
Patch4: https://github.com/hughsie/colord/commit/d8076a16ea1f4437cca3799d414faf40cddae955.patch
Patch5: https://github.com/hughsie/colord/commit/f4fdb66d0399e3223c068c663e7621ea19b71a7b.patch
%if %{with print_profiles}
BuildRequires: argyllcms
%endif

View file

@ -0,0 +1,222 @@
From d8076a16ea1f4437cca3799d414faf40cddae955 Mon Sep 17 00:00:00 2001
From: psykose <alice@ayaya.dev>
Date: Thu, 8 Feb 2024 13:12:41 +0000
Subject: [PATCH] use char * instead of gchar * for pointers passed to
sqlite3_exec
---
src/cd-device-db.c | 16 ++++++++--------
src/cd-mapping-db.c | 18 +++++++++---------
src/cd-profile-db.c | 10 +++++-----
3 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/src/cd-device-db.c b/src/cd-device-db.c
index 3ae44ef2..ac87a527 100644
--- a/src/cd-device-db.c
+++ b/src/cd-device-db.c
@@ -48,7 +48,7 @@ cd_device_db_load (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -109,7 +109,7 @@ cd_device_db_empty (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_DEVICE_DB (ddb), FALSE);
@@ -137,7 +137,7 @@ cd_device_db_add (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
@@ -175,7 +175,7 @@ cd_device_db_set_property (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
@@ -212,7 +212,7 @@ cd_device_db_remove (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement1 = NULL;
gchar *statement2 = NULL;
gint rc;
@@ -277,7 +277,7 @@ cd_device_db_get_property (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
gchar *value = NULL;
@@ -331,7 +331,7 @@ cd_device_db_get_devices (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -372,7 +372,7 @@ cd_device_db_get_properties (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
diff --git a/src/cd-mapping-db.c b/src/cd-mapping-db.c
index 5ffd74dd..291274a4 100644
--- a/src/cd-mapping-db.c
+++ b/src/cd-mapping-db.c
@@ -67,7 +67,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -131,7 +131,7 @@ cd_mapping_db_load (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -230,7 +230,7 @@ cd_mapping_db_empty (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_MAPPING_DB (mdb), FALSE);
@@ -259,7 +259,7 @@ cd_mapping_db_add (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
gint64 timestamp;
@@ -307,7 +307,7 @@ cd_mapping_db_clear_timestamp (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
@@ -351,7 +351,7 @@ cd_mapping_db_remove (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
@@ -406,7 +406,7 @@ cd_mapping_db_get_profiles (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -456,7 +456,7 @@ cd_mapping_db_get_devices (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -522,7 +522,7 @@ cd_mapping_db_get_timestamp (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
guint64 timestamp = G_MAXUINT64;
diff --git a/src/cd-profile-db.c b/src/cd-profile-db.c
index e5b74e37..124fa09f 100644
--- a/src/cd-profile-db.c
+++ b/src/cd-profile-db.c
@@ -48,7 +48,7 @@ cd_profile_db_load (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -98,7 +98,7 @@ cd_profile_db_empty (CdProfileDb *pdb, GError **error)
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
const gchar *statement;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_PROFILE_DB (pdb), FALSE);
@@ -129,7 +129,7 @@ cd_profile_db_set_property (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;
@@ -169,7 +169,7 @@ cd_profile_db_remove (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement = NULL;
gint rc;
@@ -223,7 +223,7 @@ cd_profile_db_get_property (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- gchar *error_msg = NULL;
+ char *error_msg = NULL;
gchar *statement;
gint rc;

View file

@ -0,0 +1,392 @@
From f4fdb66d0399e3223c068c663e7621ea19b71a7b Mon Sep 17 00:00:00 2001
From: psykose <alice@ayaya.dev>
Date: Mon, 12 Feb 2024 14:59:42 +0000
Subject: [PATCH] use g_autoptr again but with a custom CLEANUP_FUNC
my prior analysis was completely wrong, and the original crash was seen
because sqlite3_malloc pointers passed to g_free cause a mismatched
malloc/free, not because of lack of initialisation.
use autoptr with an overriden CLEANUP_FUNC instead. for
cd_mapping_db_load/cd_device_db_remove, keep using manual sqlite3_free
since we reuse the same error_msg multiple times.
---
src/cd-common.h | 3 +++
src/cd-device-db.c | 21 +++++++--------------
src/cd-mapping-db.c | 24 ++++++++----------------
src/cd-profile-db.c | 15 +++++----------
4 files changed, 23 insertions(+), 40 deletions(-)
diff --git a/src/cd-common.h b/src/cd-common.h
index adf93438..c60061ae 100644
--- a/src/cd-common.h
+++ b/src/cd-common.h
@@ -26,6 +26,7 @@
#include <gio/gio.h>
#include <colord-private.h>
+#include <sqlite3.h>
#define COLORD_DBUS_SERVICE "org.freedesktop.ColorManager"
#define COLORD_DBUS_PATH "/org/freedesktop/ColorManager"
@@ -37,6 +38,8 @@
#define CD_DBUS_METADATA_KEY_LEN_MAX 256 /* chars */
#define CD_DBUS_METADATA_VALUE_LEN_MAX 4096 /* chars */
+typedef char sqlite_str;
+G_DEFINE_AUTOPTR_CLEANUP_FUNC (sqlite_str, sqlite3_free)
#define CD_CLIENT_ERROR cd_client_error_quark()
diff --git a/src/cd-device-db.c b/src/cd-device-db.c
index ac87a527..e97c8823 100644
--- a/src/cd-device-db.c
+++ b/src/cd-device-db.c
@@ -48,7 +48,7 @@ cd_device_db_load (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
const gchar *statement;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -82,7 +82,6 @@ cd_device_db_load (CdDeviceDb *ddb,
NULL, NULL, &error_msg);
if (rc != SQLITE_OK) {
g_debug ("CdDeviceDb: creating table to repair: %s", error_msg);
- sqlite3_free (error_msg);
statement = "CREATE TABLE devices ("
"device_id TEXT PRIMARY KEY,"
"device TEXT);";
@@ -109,7 +108,7 @@ cd_device_db_empty (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
const gchar *statement;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_DEVICE_DB (ddb), FALSE);
@@ -124,7 +123,6 @@ cd_device_db_empty (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
return FALSE;
}
return TRUE;
@@ -137,7 +135,7 @@ cd_device_db_add (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -157,7 +155,6 @@ cd_device_db_add (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -175,7 +172,7 @@ cd_device_db_set_property (CdDeviceDb *ddb,
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -196,7 +193,6 @@ cd_device_db_set_property (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -277,7 +273,7 @@ cd_device_db_get_property (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
gchar *value = NULL;
@@ -305,7 +301,6 @@ cd_device_db_get_property (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
@@ -331,7 +326,7 @@ cd_device_db_get_devices (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -355,7 +350,6 @@ cd_device_db_get_devices (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
@@ -372,7 +366,7 @@ cd_device_db_get_properties (CdDeviceDb *ddb,
GError **error)
{
CdDeviceDbPrivate *priv = GET_PRIVATE (ddb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -398,7 +392,6 @@ cd_device_db_get_properties (CdDeviceDb *ddb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
diff --git a/src/cd-mapping-db.c b/src/cd-mapping-db.c
index 291274a4..edf944c1 100644
--- a/src/cd-mapping-db.c
+++ b/src/cd-mapping-db.c
@@ -67,7 +67,7 @@ cd_mapping_db_open (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -97,7 +97,6 @@ cd_mapping_db_open (CdMappingDb *mdb,
if (rc != SQLITE_OK) {
/* Database appears to be mangled, so wipe it and try again */
sqlite3_close (priv->db);
- sqlite3_free(error_msg);
priv->db = NULL;
if (retry) {
@@ -230,7 +229,7 @@ cd_mapping_db_empty (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
const gchar *statement;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_MAPPING_DB (mdb), FALSE);
@@ -245,7 +244,6 @@ cd_mapping_db_empty (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
return FALSE;
}
return TRUE;
@@ -259,7 +257,7 @@ cd_mapping_db_add (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
gint64 timestamp;
@@ -282,7 +280,6 @@ cd_mapping_db_add (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -307,7 +304,7 @@ cd_mapping_db_clear_timestamp (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -328,7 +325,6 @@ cd_mapping_db_clear_timestamp (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -351,7 +347,7 @@ cd_mapping_db_remove (CdMappingDb *mdb,
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -371,7 +367,6 @@ cd_mapping_db_remove (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -406,7 +401,7 @@ cd_mapping_db_get_profiles (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -433,7 +428,6 @@ cd_mapping_db_get_profiles (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
@@ -456,7 +450,7 @@ cd_mapping_db_get_devices (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
GPtrArray *array = NULL;
@@ -483,7 +477,6 @@ cd_mapping_db_get_devices (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
@@ -522,7 +515,7 @@ cd_mapping_db_get_timestamp (CdMappingDb *mdb,
GError **error)
{
CdMappingDbPrivate *priv = GET_PRIVATE (mdb);
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
guint64 timestamp = G_MAXUINT64;
@@ -548,7 +541,6 @@ cd_mapping_db_get_timestamp (CdMappingDb *mdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
diff --git a/src/cd-profile-db.c b/src/cd-profile-db.c
index 124fa09f..7d6b09a6 100644
--- a/src/cd-profile-db.c
+++ b/src/cd-profile-db.c
@@ -48,7 +48,7 @@ cd_profile_db_load (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
const gchar *statement;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_autofree gchar *path = NULL;
@@ -69,7 +69,6 @@ cd_profile_db_load (CdProfileDb *pdb,
CD_CLIENT_ERROR_INTERNAL,
"Can't open database: %s\n",
sqlite3_errmsg (priv->db));
- sqlite3_free (error_msg);
sqlite3_close (priv->db);
return FALSE;
}
@@ -98,7 +97,7 @@ cd_profile_db_empty (CdProfileDb *pdb, GError **error)
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
const gchar *statement;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gint rc;
g_return_val_if_fail (CD_IS_PROFILE_DB (pdb), FALSE);
@@ -113,7 +112,6 @@ cd_profile_db_empty (CdProfileDb *pdb, GError **error)
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
return FALSE;
}
return TRUE;
@@ -129,7 +127,7 @@ cd_profile_db_set_property (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -151,7 +149,6 @@ cd_profile_db_set_property (CdProfileDb *pdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -169,7 +166,7 @@ cd_profile_db_remove (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement = NULL;
gint rc;
@@ -190,7 +187,6 @@ cd_profile_db_remove (CdProfileDb *pdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
ret = FALSE;
goto out;
}
@@ -223,7 +219,7 @@ cd_profile_db_get_property (CdProfileDb *pdb,
{
CdProfileDbPrivate *priv = GET_PRIVATE (pdb);
gboolean ret = TRUE;
- char *error_msg = NULL;
+ g_autoptr(sqlite_str) error_msg = NULL;
gchar *statement;
gint rc;
@@ -250,7 +246,6 @@ cd_profile_db_get_property (CdProfileDb *pdb,
CD_CLIENT_ERROR_INTERNAL,
"SQL error: %s",
error_msg);
- sqlite3_free (error_msg);
goto out;
}
out: