diff --git a/src/backend/backend.c b/src/backend/backend.c index fed9c95..b7b93fd 100644 --- a/src/backend/backend.c +++ b/src/backend/backend.c @@ -89,13 +89,13 @@ fs_backend *fs_backend_init(const char *db_name, int flags) ret->md = fs_metadata_open(db_name); if (!ret->md) { fs_error(LOG_CRIT, "cannot read metadata file for kb %s", db_name); - + free(ret); return NULL; } if (!fs_metadata_get_string(ret->md, FS_MD_NAME, NULL)) { fs_error(LOG_ERR, "no value for KB name in metadata, does KB exist?"); - + free(ret); return NULL; } @@ -103,20 +103,20 @@ fs_backend *fs_backend_init(const char *db_name, int flags) if (strcmp(hashfunc, FS_HASH)) { fs_error(LOG_ERR, "stored hash function does not match server's hash function"); fs_error(LOG_ERR, "rebuild code with correct function or replace store"); - + free(ret); return NULL; } const char *store_type = fs_metadata_get_string(ret->md, FS_MD_STORE, "semi-native"); if (strcmp(store_type, "native")) { fs_error(LOG_ERR, "tried to open %s store with native backend", store_type); - + free(ret); return NULL; } if (strcmp(fs_metadata_get_string(ret->md, FS_MD_NAME, "-no-match-"), db_name)) { fs_error(LOG_CRIT, "metadata and opened KB name don't match %s / %s", db_name, fs_metadata_get_string(ret->md, FS_MD_NAME, "-no-match-")); - + free(ret); return NULL; } @@ -124,13 +124,13 @@ fs_backend *fs_backend_init(const char *db_name, int flags) const int version = fs_metadata_get_int(ret->md, FS_MD_VERSION, 0); if (version == -1) { fs_error(LOG_CRIT, "cannot find number of segments in KB %s", db_name); - + free(ret); return NULL; } if (version > FS_CURRENT_TABLE_VERSION || version < FS_EARLIEST_TABLE_VERSION) { fs_error(LOG_ERR, "wrong table metadata version in KB %s", db_name); - + free(ret); return NULL; } diff --git a/src/backend/chain.c b/src/backend/chain.c index 0028ece..bbb0867 100644 --- a/src/backend/chain.c +++ b/src/backend/chain.c @@ -103,7 +103,7 @@ fs_chain *fs_chain_open_filename(const char *fname, int flags) bc->fd = open(fname, FS_O_NOATIME | flags, FS_FILE_MODE); if (bc->fd == -1) { fs_error(LOG_CRIT, "failed to open chain %s: %s", fname, strerror(errno)); - + free(bc); return NULL; } bc->filename = g_strdup(fname); @@ -117,7 +117,7 @@ fs_chain *fs_chain_open_filename(const char *fname, int flags) } if (header.id != CHAIN_ID) { fs_error(LOG_CRIT, "%s does not look like a chain file", bc->filename); - + free(bc); return NULL; } if (map_bc(bc, header.length, header.size)) { diff --git a/src/backend/list.c b/src/backend/list.c index 6c4420c..427285b 100644 --- a/src/backend/list.c +++ b/src/backend/list.c @@ -85,23 +85,23 @@ fs_list *fs_list_open_filename(const char *filename, size_t width, int flags) l->fd = open(filename, FS_O_NOATIME | flags, FS_FILE_MODE); if (l->fd == -1) { fs_error(LOG_ERR, "failed to open list file '%s': %s", l->filename, strerror(errno)); - + free(l); return NULL; } if ((flags & (O_WRONLY | O_RDWR)) && flock(l->fd, LOCK_EX) == -1) { fs_error(LOG_ERR, "failed to open list: %s, cannot get lock: %s", filename, strerror(errno)); - + free(l); return NULL; } off_t end = lseek(l->fd, 0, SEEK_END); if (end == -1) { fs_error(LOG_CRIT, "failed to open list: %s, cannot seek to end", filename); - + free(l); return NULL; } if (end % width != 0) { fs_error(LOG_CRIT, "failed to open list: %s, length not multiple of data size", filename); - + free(l); return NULL; } l->offset = end / width; @@ -111,7 +111,7 @@ fs_list *fs_list_open_filename(const char *filename, size_t width, int flags) if (l->fd == -1) { fs_error(LOG_CRIT, "failed to open list %s: %s", filename, strerror(errno)); - + free(l); return NULL; } diff --git a/src/backend/metadata.c b/src/backend/metadata.c index 76f8859..6d9007e 100644 --- a/src/backend/metadata.c +++ b/src/backend/metadata.c @@ -77,14 +77,14 @@ fs_metadata *fs_metadata_open(const char *kb) if ((fd = open(m->uri + 7, FS_O_NOATIME | O_CREAT, FS_FILE_MODE)) == -1) { fs_error(LOG_CRIT, "failed to touch metadata file %s: %s", m->uri, strerror(errno)); - + free(m); return NULL; } close(fd); m->rw = raptor_new_world(); if (!m->rw) { fs_error(LOG_CRIT, "failed to initialise raptor"); - + free(m); return NULL; } raptor_parser *rdf_parser = raptor_new_parser(m->rw, "turtle"); diff --git a/src/backend/mhash.c b/src/backend/mhash.c index 4264cd7..d5403b8 100644 --- a/src/backend/mhash.c +++ b/src/backend/mhash.c @@ -100,7 +100,7 @@ fs_mhash *fs_mhash_open_filename(const char *filename, int flags) mh->flags = flags; if (mh->fd == -1) { fs_error(LOG_ERR, "cannot open mhash file '%s': %s", filename, strerror(errno)); - + free(mh); return NULL; } mh->filename = g_strdup(filename); diff --git a/src/backend/ptable.c b/src/backend/ptable.c index 58381a8..724118b 100644 --- a/src/backend/ptable.c +++ b/src/backend/ptable.c @@ -134,11 +134,13 @@ fs_ptable *fs_ptable_open_filename(const char *fname, int flags) if (sizeof(struct ptable_header) != 512) { fs_error(LOG_CRIT, "ptable header size not 512 bytes"); + free(pt); return NULL; } pt->fd = open(fname, FS_O_NOATIME | flags, FS_FILE_MODE); if (pt->fd == -1) { fs_error(LOG_CRIT, "failed to open ptable %s: %s", fname, strerror(errno)); + free(pt); return NULL; } pt->filename = g_strdup(fname); diff --git a/src/backend/rhash.c b/src/backend/rhash.c index 2ccf3d1..2956e6b 100644 --- a/src/backend/rhash.c +++ b/src/backend/rhash.c @@ -169,7 +169,7 @@ fs_rhash *fs_rhash_open_filename(const char *filename, int flags) rh->flags = flags; if (rh->fd == -1) { fs_error(LOG_ERR, "cannot open rhash file '%s': %s", filename, strerror(errno)); - + free(rh); return NULL; } rh->z_buffer_size = 1024; diff --git a/src/backend/tbchain.c b/src/backend/tbchain.c index ecbb468..8c7a443 100644 --- a/src/backend/tbchain.c +++ b/src/backend/tbchain.c @@ -165,6 +165,7 @@ fs_tbchain *fs_tbchain_open_filename(const char *fname, int flags) bc->fd = open(fname, FS_O_NOATIME | flags, FS_FILE_MODE); if (bc->fd == -1) { fs_error(LOG_CRIT, "failed to open chain %s: %s", fname, strerror(errno)); + free(bc); return NULL; } bc->filename = g_strdup(fname); @@ -172,16 +173,19 @@ fs_tbchain *fs_tbchain_open_filename(const char *fname, int flags) if (sizeof(*header) != 512) { fs_error(LOG_CRIT, "tbchain header size is %zd, not 512 bytes", sizeof(header)); + free(bc); return NULL; } if (sizeof(fs_tblock) != FS_TBLOCK_SIZE) { fs_error(LOG_CRIT, "tblock size is %zd, not %d bytes", sizeof(fs_tblock), FS_TBLOCK_SIZE); + free(bc); return NULL; } int init_reqd = 0; if (bc->flags & O_TRUNC && ftruncate(bc->fd, sizeof(*header))) { fs_error(LOG_CRIT, "ftruncate failed on %s: %s", fname, strerror(errno)); + free(bc); return NULL; } @@ -192,6 +196,7 @@ fs_tbchain *fs_tbchain_open_filename(const char *fname, int flags) if (header == MAP_FAILED || header == NULL) { munmap(header, sizeof(*header)); fs_error(LOG_CRIT, "header mmap failed for %s: %s", bc->filename, strerror(errno)); + free(bc); return NULL; } diff --git a/src/backend/tlist.c b/src/backend/tlist.c index acb8bf4..e4897c5 100644 --- a/src/backend/tlist.c +++ b/src/backend/tlist.c @@ -130,7 +130,7 @@ fs_tlist *fs_tlist_open_filename(const char *filename, int flags) if (length == HEADER && header.id != TLIST_ID) { fs_error(LOG_ERR, "ā€œ%sā€ does not appear to be a tlist", filename); close(l->fd); - + free(l); return NULL; } l->offset = header.length; @@ -141,7 +141,7 @@ fs_tlist *fs_tlist_open_filename(const char *filename, int flags) if ((flags & (O_WRONLY | O_RDWR)) && flock(l->fd, LOCK_EX) == -1) { fs_error(LOG_ERR, "failed to open list: %s, cannot get lock: %s", filename, strerror(errno)); close(l->fd); - + free(l); return NULL; } write_header(l); @@ -150,7 +150,7 @@ fs_tlist *fs_tlist_open_filename(const char *filename, int flags) if (l->fd == -1) { fs_error(LOG_CRIT, "failed to open list %s: %s", filename, strerror(errno)); - + free(l); return NULL; } diff --git a/src/backend/tree.c b/src/backend/tree.c index dd73d2c..257860a 100644 --- a/src/backend/tree.c +++ b/src/backend/tree.c @@ -192,6 +192,7 @@ fs_tree *fs_tree_open_filename(fs_backend *be, const char *name, const char *fil int fd = open(filename, FS_O_NOATIME | O_RDWR | flags, FS_FILE_MODE); if (fd == -1) { fs_error(LOG_ERR, "failed to open tree file '%s': %s", filename, strerror(errno)); + free(t); return NULL; } t->filename = (char *)filename; @@ -214,13 +215,13 @@ fs_tree *fs_tree_open_filename(fs_backend *be, const char *name, const char *fil if (header.id != TREE_ID) { fs_error(LOG_ERR, "'%s' does not appear to be a valid treefile", filename); close(fd); - + free(t); return NULL; } t->bc = fs_chain_open_filename(header.chainfile, flags); if (!t->bc) { fs_error(LOG_CRIT, "failed to open chain file '%s'", header.chainfile); - + free(t); return NULL; } diff --git a/src/common/umac.c b/src/common/umac.c index 1c82230..c6d1dd1 100644 --- a/src/common/umac.c +++ b/src/common/umac.c @@ -2095,7 +2095,7 @@ static int umac_verify(void) } printf("Done.\n"); umac_delete(ctx); - + free(data_ptr); return return_value; } diff --git a/src/frontend/results.c b/src/frontend/results.c index eaf61a4..e411d5b 100644 --- a/src/frontend/results.c +++ b/src/frontend/results.c @@ -3169,7 +3169,7 @@ int fs_sort_column(fs_query *q, fs_binding *b, int col, int **sorted) if (!sort) { /* this shouldn't happen, but just incase */ fs_error(LOG_ERR, "cannot get sortable string for %016llx", rid); - + free(sortable); return 1; } sortable[row].str = sort; diff --git a/src/libs/stemmer/libstemmer/libstemmer.c b/src/libs/stemmer/libstemmer/libstemmer.c index 5c3852a..838952a 100644 --- a/src/libs/stemmer/libstemmer/libstemmer.c +++ b/src/libs/stemmer/libstemmer/libstemmer.c @@ -40,7 +40,10 @@ sb_stemmer_new(const char * algorithm, const char * charenc) (struct sb_stemmer *) malloc(sizeof(struct sb_stemmer)); if (stemmer == NULL) return NULL; enc = sb_getenc(charenc); - if (enc == ENC_UNKNOWN) return NULL; + if (enc == ENC_UNKNOWN){ + free(stemmer); + return NULL; + } for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; diff --git a/src/libs/stemmer/libstemmer/libstemmer_utf8.c b/src/libs/stemmer/libstemmer/libstemmer_utf8.c index 793a081..a4dcce3 100644 --- a/src/libs/stemmer/libstemmer/libstemmer_utf8.c +++ b/src/libs/stemmer/libstemmer/libstemmer_utf8.c @@ -45,7 +45,10 @@ sb_stemmer_new(const char * algorithm, const char * charenc) for (module = modules; module->name != 0; module++) { if (strcmp(module->name, algorithm) == 0 && module->enc == enc) break; } - if (module->name == NULL) return NULL; + if (module->name == NULL){ + free(stemmer); + return NULL; + } stemmer->create = module->create; stemmer->close = module->close;