[erlang-bugs] fmtq bug by inspection

Rickard Green <>
Wed Jun 18 15:52:37 CEST 2008


Hi Perry,

Thanks for the bug report. I looked a little closer at it, and it turns 
out that the use of fmtq() should be removed. erts_printf will currently 
produce erroneous results when double backslashes are used in format 
strings. I wasn't able to find any format strings like that being passed 
to erts_printf in the emulator, i.e., the bug is currently completely 
harmless. The bug will be fixed in R12B-4, though.

BR,
Rickard, Erlang/OTP, Ericsson AB.

Perry Smith wrote:
> This looks like a bug to me:
> 
> static char* fmtq(char* ptr, int* buf)
> {
>      int c;
> 
>      switch((c=*ptr++)) {
> <snip>
>      case '0': case '1': case '2': case '3': case '4':
>      case '5': case '6': case '7':
> 	c = c - '0';
> 	if ((*ptr >= 0) && (*ptr <= 7)) { <<<<<
> 	    c = (c << 3) | (*ptr - '0');
> 	    ptr++;
> 	    if ((*ptr >= 0) && (*ptr <= 7)) { <<<<<
> 		c = (c << 3) | (*ptr - '0');
> 		ptr++;
> 	    }
> 	}
> 	break;
>      }
>      *buf = c;
>      return ptr;
> }
> 
> Shouldn't it be:
> 
>      case '0': case '1': case '2': case '3': case '4':
>      case '5': case '6': case '7':
> 	c = c - '0';
> 	if ((*ptr >= '0') && (*ptr <= '7')) { /* added single quotes */
> 	    c = (c << 3) | (*ptr - '0');
> 	    ptr++;
> 	    if ((*ptr >= '0') && (*ptr <= '7')) { /* added single quotes */
> 		c = (c << 3) | (*ptr - '0');
> 		ptr++;
> 	    }
> 	}
> 
> I found this simply by looking at the compiler warnings.
> 
> HTH
> Perry
> 
> _______________________________________________
> erlang-bugs mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-bugs
> 



More information about the erlang-bugs mailing list