]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.2066: xxd: corrupting files when reversing bit dumps v9.0.2066
authorOldWorldOrdr <joey.t.reinhart@gmail.com>
Wed, 25 Oct 2023 18:57:30 +0000 (20:57 +0200)
committerChristian Brabandt <cb@256bit.org>
Wed, 25 Oct 2023 18:57:30 +0000 (20:57 +0200)
Problem:  xxd: corrupting files when reversing bit dumps
Solution: handle reversing bit dump slightly differently

fixes:  #13410
closes: #13415

Co-authored-by: OldWorldOrdr <joey.t.reinhart@gmail.com>
Co-authored-by: K.Takata <kentkt@csc.jp>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Signed-off-by: K.Takata <kentkt@csc.jp>
Signed-off-by: tristhaus <tristhaus@yahoo.de>
src/testdir/test_xxd.vim
src/version.c
src/xxd/xxd.c

index 53e1a95c37b25152484642899fc79241796598a5..7a2771e033894525f2962a17065980c827d0ff0e 100644 (file)
@@ -373,6 +373,13 @@ func Test_xxd_revert_bit_dump()
   bwipe!
 endfunc
 
+func Test_xxd_roundtrip_large_bit_dump()
+  new
+  exe 'r! printf "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" | ' . s:xxd_cmd . ' -b | ' . s:xxd_cmd . ' -r -b'
+  call assert_match('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345678', join(getline(1, 3)))
+  bwipe!
+endfunc
+
 func Test_xxd_version()
   new
   exe 'r! ' . s:xxd_cmd . ' -v'
index 9198a788b19a9324d20d62204bbc2de46f8cb233..e45d7fa0b2ffb2b3a35932f36de0096c4a679966 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2066,
 /**/
     2065,
 /**/
index 544aa50b955248a9997ad834e9afb3f6ba2a6e74..94a0e6146077545cf8e645d4296b496897ed2b1b 100644 (file)
@@ -136,7 +136,7 @@ extern void perror __P((char *));
 # endif
 #endif
 
-char version[] = "xxd 2023-10-08 by Juergen Weigert et al.";
+char version[] = "xxd 2023-10-24 by Juergen Weigert et al.";
 #ifdef WIN32
 char osver[] = " (Win32)";
 #else
@@ -418,19 +418,13 @@ huntype(
             }
           else /* HEX_BITS */
             {
-              n1 = parse_hex_digit(c);
-              if (n1 >= 0)
-                {
-                  want_off = (want_off << 4) | n1;
-                }
-
-              if (bt < 0)
-                {
-                  p = 0;
+             if (n1 < 0)
+               {
+                 p = 0;
                   bcnt = 0;
-                  b = 0;
-                  continue;
-                }
+                 continue;
+               }
+             want_off = (want_off << 4) | n1;
             }
           continue;
         }