http://bugs.gentoo.org/337329 do not interpret \\1 as an octal sequence. require it to start with \\0. --- a/src/bltin/printf.c +++ b/src/bltin/printf.c @@ -247,18 +247,10 @@ conv_escape_str(char *str) * They start with a \0, and are followed by 0, 1, 2, * or 3 octal digits. */ - if (ch == '0') { - unsigned char i; - i = 3; - ch = 0; - do { - unsigned k = octtobin(*str); - if (k > 7) - break; - str++; - ch <<= 3; - ch += k; - } while (--i); + if (ch >= '1' && ch <= '9') { + /* Filter \1...\9; let \0 fall to conv_escape(). */ + ch = '\\'; + --str; continue; }