Permalink
Browse files

Merge pull request #136 from jen140/jen140-patch-1

Fixes for a few memory leaks.
  • Loading branch information...
2 parents 2424c6c + 2596f01 commit e867ee08186635231193759502bdaf61703615d7 @swh swh committed Apr 20, 2016
View
@@ -89,48 +89,48 @@ 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;
}
const char *hashfunc = fs_metadata_get_string(ret->md, FS_MD_HASHFUNC, "MD5");
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;
}
ret->segments = fs_metadata_get_int(ret->md, FS_MD_SEGMENTS, 0);
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;
}
View
@@ -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)) {
View
@@ -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;
}
View
@@ -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");
View
@@ -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);
View
@@ -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);
View
@@ -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;
View
@@ -165,23 +165,27 @@ 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);
bc->flags = 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;
}
View
@@ -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;
}
View
@@ -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;
}
View
@@ -2095,7 +2095,7 @@ static int umac_verify(void)
}
printf("Done.\n");
umac_delete(ctx);
-
+ free(data_ptr);
return return_value;
}
View
@@ -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;
@@ -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;
@@ -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;

0 comments on commit e867ee0

Please sign in to comment.