Quellcode durchsuchen

Fix regressing in printf padding with space

There was bug in printf where space paddings cause segfault,
the problem was that it was pulled from the stack twice while it should
be only done once.
oddcoder vor 5 Jahren
Ursprung
Commit
4a47bc4a6f
1 geänderte Dateien mit 4 neuen und 3 gelöschten Zeilen
  1. 4 3
      src/header/stdio/printf.rs

+ 4 - 3
src/header/stdio/printf.rs

@@ -472,7 +472,6 @@ struct PrintfArg {
     sign_always: bool,
     min_width: Number,
     precision: Option<Number>,
-    pad_space: Number,
     pad_zero: Number,
     intkind: IntKind,
     fmt: u8,
@@ -596,7 +595,6 @@ impl Iterator for PrintfIter {
                 sign_always,
                 min_width,
                 precision,
-                pad_space,
                 pad_zero,
                 intkind,
                 fmt,
@@ -667,8 +665,11 @@ unsafe fn inner_printf<W: Write>(w: W, format: *const c_char, mut ap: VaList) ->
         let sign_always = arg.sign_always;
         let min_width = arg.min_width.resolve(&mut varargs, &mut ap);
         let precision = arg.precision.map(|n| n.resolve(&mut varargs, &mut ap));
-        let pad_space = arg.pad_space.resolve(&mut varargs, &mut ap);
         let pad_zero = arg.pad_zero.resolve(&mut varargs, &mut ap);
+        let pad_space = match pad_zero {
+            0 => min_width,
+            _ => 0,
+        };
         let intkind = arg.intkind;
         let fmt = arg.fmt;
         let fmtkind = arg.fmtkind;