[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