Blame SOURCES/0030-tests-t3000-resize-fs.sh-Add-very-deep-directory.patch

0cb0b9
From 599ce25c802fc1154ed619fde4249bb381430407 Mon Sep 17 00:00:00 2001
0cb0b9
From: Mike Fleetwood <mike.fleetwood@googlemail.com>
0cb0b9
Date: Sun, 28 Feb 2016 15:36:11 +0000
0cb0b9
Subject: [PATCH 30/30] tests: t3000-resize-fs.sh: Add very deep directory
0cb0b9
0cb0b9
Create 500 deep directory tree, with longest name of 4000 characters, to
0cb0b9
the file system being resized to test the fix to prevent crash when
0cb0b9
resizing a FAT file system with such a long path.
0cb0b9
---
0cb0b9
 tests/t3000-resize-fs.sh | 16 ++++++++++++++++
0cb0b9
 1 file changed, 16 insertions(+)
0cb0b9
0cb0b9
diff --git a/tests/t3000-resize-fs.sh b/tests/t3000-resize-fs.sh
0cb0b9
index a79a307..608871c 100755
0cb0b9
--- a/tests/t3000-resize-fs.sh
0cb0b9
+++ b/tests/t3000-resize-fs.sh
0cb0b9
@@ -46,6 +46,13 @@ device_sectors_required=$(echo $default_end | sed 's/s$//')
0cb0b9
 # Ensure that $dev is large enough for this test
0cb0b9
 test $device_sectors_required -le $dev_n_sectors || fail=1
0cb0b9
 
0cb0b9
+# create mount point dir
0cb0b9
+mount_point="`pwd`/mnt"
0cb0b9
+mkdir "$mount_point" || fail=1
0cb0b9
+
0cb0b9
+# be sure to unmount upon interrupt, failure, etc.
0cb0b9
+cleanup_fn_() { umount "${dev}1" > /dev/null 2>&1; }
0cb0b9
+
0cb0b9
 for fs_type in hfs+ fat32 fat16; do
0cb0b9
   echo "fs_type=$fs_type"
0cb0b9
 
0cb0b9
@@ -69,6 +76,15 @@ for fs_type in hfs+ fat32 fat16; do
0cb0b9
   # create the file system
0cb0b9
   $mkfs_cmd ${dev}1 || fail=1
0cb0b9
 
0cb0b9
+  # create 500 deep directory tree with longest name 4000 characters
0cb0b9
+  # to catch core dump in libparted/fs/r/fat/count.c flag_traverse_dir()
0cb0b9
+  # overflowing 512 byte file_name local buffer.
0cb0b9
+  mount "${dev}1" "$mount_point" || fail=1
0cb0b9
+  cat /dev/null > exp
0cb0b9
+  ( cd "$mount_point"; for d in `seq 500`; do mkdir TESTDIR; cd TESTDIR; done ) > out
0cb0b9
+  compare exp out || fail=1   # Ensure no errors creating directory tree
0cb0b9
+  umount "${dev}1" || fail=1
0cb0b9
+
0cb0b9
   # NOTE: shrinking is the only type of resizing that works.
0cb0b9
   # resize that file system to be one cylinder (8MiB) smaller
0cb0b9
   fs-resize ${dev}1 0 $new_end > out 2>&1 || fail=1
0cb0b9
-- 
0cb0b9
2.5.0
0cb0b9