]> pd.if.org Git - zpackage/blobdiff - lib/zpm.c
fix pointer related bugs
[zpackage] / lib / zpm.c
index 004b7d393e4f9765c05680ef4ec211e2235d6dd7..e775b1209809f36c22ba7584d1036168a442432d 100644 (file)
--- a/lib/zpm.c
+++ b/lib/zpm.c
@@ -328,6 +328,10 @@ int zpm_init(struct zpm *pkg, char *path) {
        sqlite3 *db = 0;
        int appid;
 
+       if (!pkg) {
+               return 0;
+       }
+
        zpm_clearmem(pkg);
 
        rc = sqlite3_open_v2(path, &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
@@ -362,6 +366,7 @@ int zpm_init(struct zpm *pkg, char *path) {
                pkg->db = 0;
                return 0;
        }
+       zpm_addvercmp(pkg);
 
        return 1;
 }
@@ -389,6 +394,7 @@ int zpm_open(struct zpm *zpm, char *path) {
                zpm->error = 1;
                return 0;
        }
+       zpm_addvercmp(zpm);
 
        return 1;
 }
@@ -574,7 +580,7 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) {
 
                /* if exe, set neededs */
                if (libelf_type(content) == ET_EXEC) {
-                       Elf64_Shdr *dsect;
+                       Elf64_Shdr *dsect = 0;
                        char *elf;
 
                        elf = (char *)content;
@@ -585,10 +591,17 @@ static int set_elf_info(sqlite3 *db, char *hash, char *content, size_t length) {
                                        dsect = (Elf64_Shdr *)(elf + phdr->p_offset);
                                }
                        }
+                       if (!dsect) {
+                               /* no dynamic section found */
+                               return 1;
+                       }
+
+#if 0
                        dyn = (Elf64_Dyn *)(elf + dsect->sh_offset);
                        if (!dyn) {
                                exit(9);
                        }
+#endif
                        dyn = (Elf64_Dyn *)dsect;
 
                        dsect = libelf_section(elf, SHT_DYNAMIC);