summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqfs/read_inode.c8
-rw-r--r--lib/sqfs/xattr_writer.c1
-rw-r--r--lib/sqfshelper/serialize_fstree.c8
3 files changed, 13 insertions, 4 deletions
diff --git a/lib/sqfs/read_inode.c b/lib/sqfs/read_inode.c
index f877da1..7e59445 100644
--- a/lib/sqfs/read_inode.c
+++ b/lib/sqfs/read_inode.c
@@ -263,8 +263,10 @@ static int read_inode_dir_ext(sqfs_meta_reader_t *ir, sqfs_inode_t *base,
for (i = 0; i <= dir.inodex_count; ++i) {
err = sqfs_meta_reader_read(ir, &ent, sizeof(ent));
- if (err)
+ if (err) {
+ free(out);
return err;
+ }
SWAB32(ent.start_block);
SWAB32(ent.index);
@@ -289,8 +291,10 @@ static int read_inode_dir_ext(sqfs_meta_reader_t *ir, sqfs_inode_t *base,
err = sqfs_meta_reader_read(ir, out->extra + index_used,
ent.size + 1);
- if (err)
+ if (err) {
+ free(out);
return err;
+ }
}
out->num_dir_idx_bytes = index_used;
diff --git a/lib/sqfs/xattr_writer.c b/lib/sqfs/xattr_writer.c
index 25fee80..22d4639 100644
--- a/lib/sqfs/xattr_writer.c
+++ b/lib/sqfs/xattr_writer.c
@@ -359,6 +359,7 @@ static sqfs_s32 write_value(sqfs_meta_writer_t *mw, const char *value_str,
if (err)
goto fail;
+ free(value);
return sizeof(vent) + size;
fail:
free(value);
diff --git a/lib/sqfshelper/serialize_fstree.c b/lib/sqfshelper/serialize_fstree.c
index 05a9d3a..c2d956f 100644
--- a/lib/sqfshelper/serialize_fstree.c
+++ b/lib/sqfshelper/serialize_fstree.c
@@ -175,13 +175,17 @@ int sqfs_serialize_fstree(const char *filename, sqfs_file_t *file,
ret = sqfs_id_table_id_to_index(idtbl, n->uid,
&inode->base.uid_idx);
- if (ret)
+ if (ret) {
+ free(inode);
goto out;
+ }
ret = sqfs_id_table_id_to_index(idtbl, n->gid,
&inode->base.gid_idx);
- if (ret)
+ if (ret) {
+ free(inode);
goto out;
+ }
sqfs_meta_writer_get_position(im, &block, &offset);
fs->inode_table[i]->inode_ref = (block << 16) | offset;