Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Winsocat loses parts of binary input over STDIN #18

Open
arixmkii opened this issue Jan 23, 2025 · 0 comments
Open

Winsocat loses parts of binary input over STDIN #18

arixmkii opened this issue Jan 23, 2025 · 0 comments

Comments

@arixmkii
Copy link

This doesn't happen with socat app under Unix like systems.

If there is input of 4MB binary file generated from /dev/urandom and we try different ways to transfer this via STDIO

  1. cat with redirect to file
  2. cat with pipe to sed writing to file
  3. cat with socat with inner sed writing to file
  4. socat with inner cat reading file and redirect to file

On an Ubuntu system this results in

$ cat input.dat > output-cat.dat
$ cat input.dat | sed -n -b 'w output-sed.dat'
$ cat input.dat | socat STDIO EXEC:"sed -n -b \'w output-socat-sed.dat\'"
$ socat STDIO EXEC:"cat input.dat" > output-socat-cat.dat
$ ls -l | grep .dat
-rw-r--r-- 1 user user 4194304 Jan 23 16:48 input.dat
-rw-r--r-- 1 user user 4194304 Jan 23 16:53 output-cat.dat
-rw-r--r-- 1 user user 4194304 Jan 23 16:54 output-sed.dat
-rw-r--r-- 1 user user 4194304 Jan 23 16:56 output-socat-cat.dat
-rw-r--r-- 1 user user 4194304 Jan 23 16:55 output-socat-sed.dat
$ sha256sum *.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425  input.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425  output-cat.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425  output-sed.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425  output-socat-cat.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425  output-socat-sed.dat

All files are the same size and sha sums match.

On a Windows machine with winsocat and using msys2 tools

$ C:\\msys64\\usr\\bin\\cat.exe input.dat > output-cat.dat
$ C:\\msys64\\usr\\bin\\cat.exe input.dat | C:\\msys64\\usr\\bin\\sed -n -b 'w output-sed.dat'
$ C:\\msys64\\usr\\bin\\cat.exe input.dat | ./winsocat.exe STDIO EXEC:"C:\\msys64\\usr\\bin\\sed -n -b 'w output-winsocat-sed.dat'"
$ ./winsocat.exe STDIO EXEC:"C:\\msys64\\usr\\bin\\cat.exe input.dat" > output-winsocat-cat.dat
$ ls -l | grep .dat
-rw-r--r-- 1 user user  4194304 Jan 23 11:39 input.dat
-rw-r--r-- 1 user user  4194304 Jan 23 17:08 output-cat.dat
-rw-r--r-- 1 user user  4194304 Jan 23 17:08 output-sed.dat
-rw-r--r-- 1 user user  4194304 Jan 23 17:13 output-winsocat-cat.dat
-rw-r--r-- 1 user user  4128768 Jan 23 17:10 output-winsocat-sed.dat
$ sha256sum.exe *.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *input.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-cat.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-sed.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-winsocat-cat.dat
863aa4747b460e1f65849c80342a3f65728f29a859c2193e797e1873066e3690 *output-winsocat-sed.dat

When we pass STDIO to winsocat the file is shorter. We can prove that it is not in between corruption, by cutting the same size from input.dat with dd

$ dd if=/c/Temp/input.dat of=/c/Temp/input-short.dat bs=4128768 count=1
$ sha256sum.exe *.dat | sort
863aa4747b460e1f65849c80342a3f65728f29a859c2193e797e1873066e3690 *input-short.dat
863aa4747b460e1f65849c80342a3f65728f29a859c2193e797e1873066e3690 *output-winsocat-sed.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *input.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-cat.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-sed.dat
e49d87cb784ecb1bb0daf5e7878e10e72498c0acad118b80567e9a98a4ea4425 *output-winsocat-cat.dat
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant