The results are undefined if source and destination
buffers overlap when calling s[n]printf().
Such as,
    sprintf(buf, "%s some further text", buf);
The above will not produce the expected results.

This patch enssures that produce output as expected.

Signed-off-by: Wei,Jiangang <weijg.f...@cn.fujitsu.com>
---
 testcases/kernel/syscalls/chroot/chroot03.c | 14 ++++++--------
 testcases/kernel/syscalls/creat/creat04.c   | 13 +++++--------
 2 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/testcases/kernel/syscalls/chroot/chroot03.c 
b/testcases/kernel/syscalls/chroot/chroot03.c
index 9376892..3d51056 100644
--- a/testcases/kernel/syscalls/chroot/chroot03.c
+++ b/testcases/kernel/syscalls/chroot/chroot03.c
@@ -53,7 +53,11 @@ char *TCID = "chroot03";
 
 static int fd;
 static char fname[255];
-static char good_dir[100] = "/tmp/testdir";
+/*
+ *  set up nonexistent_dir to test whether chroot() is setting ENOENT
+ *  if the directory does not exist.
+ */
+static char nonexistent_dir[100] = "testdir";
 static char bad_dir[] = 
"abcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyzabcdefghijklmnopqrstmnopqrstuvwxyz";
 static char symbolic_dir[] = "sym_dir1";
 
@@ -78,7 +82,7 @@ struct test_case_t {
             * does not exist.
             */
        {
-       good_dir, ENOENT},
+       nonexistent_dir, ENOENT},
 #if !defined(UCLINUX)
            /*
             * attempt to chroot to a path pointing to an invalid address
@@ -147,12 +151,6 @@ static void setup(void)
        if (fd == -1)
                tst_brkm(TBROK, cleanup, "Failed to creat a temp file");
 
-       /*
-        * set up good_dir to test whether chroot() is setting ENOENT if the
-        * directory does not exist.
-        */
-       (void)sprintf(good_dir, "%s.%d", good_dir, getpid());
-
 #if !defined(UCLINUX)
        bad_addr = mmap(0, 1, PROT_NONE,
                        MAP_PRIVATE_EXCEPT_UCLINUX | MAP_ANONYMOUS, 0, 0);
diff --git a/testcases/kernel/syscalls/creat/creat04.c 
b/testcases/kernel/syscalls/creat/creat04.c
index 0268e77..aa4498a 100644
--- a/testcases/kernel/syscalls/creat/creat04.c
+++ b/testcases/kernel/syscalls/creat/creat04.c
@@ -68,8 +68,9 @@ void cleanup(void);
 #define FMODE  0444
 #define DMODE  00700
 
-char good_dir[40] = "testdir";
-char fname[40], fname1[40];
+static char fname_dir[] = "testdir";
+static char fname[] = "testdir/file";
+static char fname1[] = "testdir/file1";
 
 static uid_t nobody_uid;
 
@@ -103,7 +104,7 @@ int main(int ac, char **av)
                }
 
                if (pid == 0) { /* first child */
-                       if (mkdir(good_dir, DMODE) != 0) {
+                       if (mkdir(fname_dir, DMODE) != 0) {
                                perror("mkdir() failed");
                                exit(1);
                        }
@@ -157,7 +158,7 @@ int main(int ac, char **av)
                        /* clean up things in case we are looping */
                        unlink(fname);
                        unlink(fname1);
-                       rmdir(good_dir);
+                       rmdir(fname_dir);
                        exit(retval);
 
                } else {        /* parent */
@@ -192,10 +193,6 @@ void setup(void)
 
        /* make a temporary directory and cd to it */
        tst_tmpdir();
-
-       sprintf(good_dir, "%s.%d", good_dir, getpid());
-       sprintf(fname1, "%s/file1.%d", good_dir, getpid());
-       sprintf(fname, "%s/file.%d", good_dir, getpid());
 }
 
 /*
-- 
1.9.3


------------------------------------------------------------------------------
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list

Reply via email to