From 5179a76bad4b760e76d1e3e18ca4c0a0a1edb6b4 Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Mon, 7 Jun 2021 11:26:27 +0200
Subject: libsquashfs: fix block alignment if requested

1) If the block alignment flag is set, the padding bytes must be
   inserted _before_ recording the start position, otherwise the
   resulting image is not readable.

2) Also perform alignment if the flag is set on a fragment block.

Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
 lib/sqfs/block_writer.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/sqfs/block_writer.c b/lib/sqfs/block_writer.c
index f6dea26..54f0c89 100644
--- a/lib/sqfs/block_writer.c
+++ b/lib/sqfs/block_writer.c
@@ -187,15 +187,17 @@ static int write_data_block(sqfs_block_writer_t *base, void *user,
 	int err;
 	(void)user;
 
-	if (flags & SQFS_BLK_FIRST_BLOCK) {
-		wr->start = wr->file->get_size(wr->file);
-		wr->file_start = wr->num_blocks;
-
+	if (flags & (SQFS_BLK_FIRST_BLOCK | SQFS_BLK_FRAGMENT_BLOCK)) {
 		if (flags & SQFS_BLK_ALIGN) {
 			err = align_file(wr);
 			if (err)
 				return err;
 		}
+
+		if (flags & SQFS_BLK_FIRST_BLOCK) {
+			wr->start = wr->file->get_size(wr->file);
+			wr->file_start = wr->num_blocks;
+		}
 	}
 
 	offset = wr->file->get_size(wr->file);
@@ -217,13 +219,15 @@ static int write_data_block(sqfs_block_writer_t *base, void *user,
 		wr->blocks_written = wr->num_blocks;
 	}
 
-	if (flags & SQFS_BLK_LAST_BLOCK) {
-		if (flags & SQFS_BLK_ALIGN) {
+	if (flags & SQFS_BLK_ALIGN) {
+		if (flags & (SQFS_BLK_LAST_BLOCK | SQFS_BLK_FRAGMENT_BLOCK)) {
 			err = align_file(wr);
 			if (err)
 				return err;
 		}
+	}
 
+	if (flags & SQFS_BLK_LAST_BLOCK) {
 		count = wr->num_blocks - wr->file_start;
 
 		if (count == 0) {
-- 
cgit v1.2.3