diff --git a/src/header/stdio/helpers.rs b/src/header/stdio/helpers.rs
index 426e161dbee2636174de07530cd3c1087a932520..f67199e8a6ae166f7a45140abc8bd0ea18e5059f 100644
--- a/src/header/stdio/helpers.rs
+++ b/src/header/stdio/helpers.rs
@@ -97,7 +97,7 @@ pub fn fwritex(buf: *const u8, l: size_t, stream: &mut FILE) -> size_t {
         // We can't write to this stream
         return 0;
     }
-    if let Some((wbase, wpos, wend)) = stream.write {
+    if let Some((wbase, mut wpos, wend)) = stream.write {
         if l > wend - wpos {
             // We can't fit all of buf in the buffer
             return stream.write(buf);
@@ -110,6 +110,11 @@ pub fn fwritex(buf: *const u8, l: size_t, stream: &mut FILE) -> size_t {
             }
             if i > 0 {
                 let n = stream.write(buf);
+                match stream.write {
+                    Some((_, new_wpos, _)) => wpos = new_wpos,
+                    None => unreachable!("stream.write should never be None after a write call")
+                }
+
                 if n < i {
                     return n;
                 }
diff --git a/tests/Makefile b/tests/Makefile
index f2fd7c9d8aa15db03302d848f0739321701f25d9..94f0a315c187e33d597b1000a0bbbccd0b6cabbd 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -15,6 +15,7 @@ EXPECT_BINS=\
 	setjmp \
 	signal \
 	stdio/all \
+	stdio/buffer \
 	stdio/freopen \
 	stdio/fwrite \
 	stdio/getc_unget \
diff --git a/tests/stdio/buffer.c b/tests/stdio/buffer.c
new file mode 100644
index 0000000000000000000000000000000000000000..c5d55944bfa9950bfef15ddd92c4d43a2306e1d1
--- /dev/null
+++ b/tests/stdio/buffer.c
@@ -0,0 +1,10 @@
+#include <stdio.h>
+
+int main() {
+    // Tests what used to be a bug with buffering
+    fwrite("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1, 999, stdout);
+    fwrite("Test\n", 1, 5, stdout);
+    fwrite("Hello\nWorld\n", 1, 12, stdout);
+    puts("It works");
+    puts("No buffering issues here");
+}