+2008-12-31 Keith Marshall <keithmarshall@users.sourceforge.net>
+
+ Partial fix for MinGW-Bug [2457778]: (Reported by Sisyphus).
+ Correct mishandling of invalid characters in printf() format specs.
+
+ * mingwex/stdio/pformat.c (__pformat): Save `fmt' scan position in...
+ (backtrack): ...this new automatic variable, at start of each format
+ conversion specification substring; use it to backtrack, and print the
+ substring literally, if any invalid character is encountered.
+
2008-12-16 Danny Smith <dannysmith@users.sourceforge.net>
* msvcrt.def.in (___lc_codepage_func, ___lc_collate_cp_func,
__pformat_state_t state = PFORMAT_INIT;
__pformat_length_t length = PFORMAT_LENGTH_INT;
+ /* Save the current format scan position, so that we can backtrack
+ * in the event of encountering an invalid format specification...
+ */
+ char *backtrack = fmt;
+
/* Restart capture for dynamic field width and precision specs...
*/
int *width_spec = &stream.width;
}
else
+ {
/* We found a digit out of context, or some other character
- * with no designated meaning; silently reject it, and any
- * further characters other than argument length modifiers,
- * until this format specification is completely resolved.
+ * with no designated meaning; reject this format specification,
+ * backtrack, and emit it as literal text...
*/
- state = PFORMAT_END;
+ fmt = backtrack;
+ __pformat_putc( '%', &stream );
+ goto format_scan;
+ }
}
}
}