[Midnightbsd-cvs] src [7727] stable/0.8/lib/libmport: back port changes to how we handle index loads and owner/group/ mode and data fixes.
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Fri Aug 12 13:14:04 EDT 2016
Revision: 7727
http://svnweb.midnightbsd.org/src/?rev=7727
Author: laffer1
Date: 2016-08-12 13:14:04 -0400 (Fri, 12 Aug 2016)
Log Message:
-----------
back port changes to how we handle index loads and owner/group/mode and data fixes. this should stop crashes on plists using @owner with no parameters for example
Modified Paths:
--------------
stable/0.8/lib/libmport/bundle_read_install_pkg.c
stable/0.8/lib/libmport/index.c
Modified: stable/0.8/lib/libmport/bundle_read_install_pkg.c
===================================================================
--- stable/0.8/lib/libmport/bundle_read_install_pkg.c 2016-08-12 17:06:40 UTC (rev 7726)
+++ stable/0.8/lib/libmport/bundle_read_install_pkg.c 2016-08-12 17:14:04 UTC (rev 7727)
@@ -302,12 +302,10 @@
const unsigned char *mode = sqlite3_column_text(stmt, 5);
if (data == NULL) {
- err = "Out of memory";
- result = MPORT_ERR_FATAL;
- break; // we finalize below
+ e->data = strdup(""); /* needs to be empty string */
+ } else {
+ e->data = strdup((char *) data);
}
-
- e->data = strdup((char *) data);
if (checksum != NULL)
e->checksum = strdup((char *) checksum);
if (owner != NULL)
@@ -574,22 +572,47 @@
SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
goto ERROR;
}
+
if (sqlite3_bind_text(insert, 3, e->checksum, -1, SQLITE_STATIC) != SQLITE_OK) {
SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
goto ERROR;
}
- if (sqlite3_bind_text(insert, 4, e->owner, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- if (sqlite3_bind_text(insert, 5, e->group, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
- if (sqlite3_bind_text(insert, 6, e->mode, -1, SQLITE_STATIC) != SQLITE_OK) {
- SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
- goto ERROR;
- }
+
+ if (e->owner != NULL) {
+ if (sqlite3_bind_text(insert, 4, e->owner, -1, SQLITE_STATIC) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 4) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ }
+
+ if (e->group != NULL) {
+ if (sqlite3_bind_text(insert, 5, e->group, -1, SQLITE_STATIC) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 5) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ }
+
+ if (e->mode != NULL) {
+ if (sqlite3_bind_text(insert, 6, e->mode, -1, SQLITE_STATIC) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ } else {
+ if (sqlite3_bind_null(insert, 6) != SQLITE_OK) {
+ SET_ERROR(MPORT_ERR_FATAL, sqlite3_errmsg(mport->db));
+ goto ERROR;
+ }
+ }
} else if (e->type == ASSET_DIR || e->type == ASSET_DIRRM || e->type == ASSET_DIRRMTRY) {
/* if data starts with /, it's most likely an absolute path. Don't prepend cwd */
if (e->data != NULL && e->data[0] == '/')
Modified: stable/0.8/lib/libmport/index.c
===================================================================
--- stable/0.8/lib/libmport/index.c 2016-08-12 17:06:40 UTC (rev 7726)
+++ stable/0.8/lib/libmport/index.c 2016-08-12 17:14:04 UTC (rev 7727)
@@ -42,6 +42,7 @@
static int index_update_last_checked(mportInstance *);
static time_t get_time(void);
static int lookup_alias(mportInstance *, const char *, char **);
+static int attach_index_db(sqlite3 *db);
/*
* Loads the index database. The index contains a list of bundles that are
@@ -57,35 +58,46 @@
mport_index_load(mportInstance *mport)
{
- if (mport_file_exists(MPORT_INDEX_FILE)) {
-
- if (mport_db_do(mport->db, "ATTACH %Q AS idx", MPORT_INDEX_FILE) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ if (mport_file_exists(MPORT_INDEX_FILE)) {
- mport->flags |= MPORT_INST_HAVE_INDEX;
+ if (attach_index_db(mport->db) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
- if (!index_is_recentish()) {
- if (index_last_checked_recentish(mport))
- return MPORT_OK;
+ mport->flags |= MPORT_INST_HAVE_INDEX;
- return mport_index_get(mport);
- }
- } else {
- if (mport_fetch_bootstrap_index(mport) != MPORT_OK)
- RETURN_CURRENT_ERROR;
+ if (!index_is_recentish()) {
+ if (index_last_checked_recentish(mport))
+ return MPORT_OK;
- if (!mport_file_exists(MPORT_INDEX_FILE))
- RETURN_ERROR(MPORT_ERR_FATAL, "Index file could not be extracted");
-
- if (mport_db_do(mport->db, "ATTACH %Q AS idx", MPORT_INDEX_FILE) != MPORT_OK)
- RETURN_CURRENT_ERROR;
-
- mport->flags |= MPORT_INST_HAVE_INDEX;
- if (index_update_last_checked(mport) != MPORT_OK)
+ return mport_index_get(mport);
+ }
+ } else {
+ if (mport_fetch_bootstrap_index(mport) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
+
+ if (!mport_file_exists(MPORT_INDEX_FILE))
+ RETURN_ERROR(MPORT_ERR_FATAL, "Index file could not be extracted");
+
+ if (attach_index_db(mport->db) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
+
+ mport->flags |= MPORT_INST_HAVE_INDEX;
+ if (index_update_last_checked(mport) != MPORT_OK)
+ RETURN_CURRENT_ERROR;
+ }
+
+ return (MPORT_OK);
+}
+
+int
+attach_index_db(sqlite3 *db)
+{
+
+ if (mport_db_do(db, "ATTACH %Q AS idx", MPORT_INDEX_FILE) != MPORT_OK) {
RETURN_CURRENT_ERROR;
- }
-
- return (MPORT_OK);
+ }
+
+ return (MPORT_OK);
}
@@ -114,7 +126,7 @@
mport->flags &= ~MPORT_INST_HAVE_INDEX;
- if (mport_db_do(mport->db, "ATTACH %Q AS idx", MPORT_INDEX_FILE) != MPORT_OK)
+ if (attach_index_db(mport->db) != MPORT_OK)
RETURN_CURRENT_ERROR;
mport->flags |= MPORT_INST_HAVE_INDEX;
More information about the Midnightbsd-cvs
mailing list