[erlang-bugs] function clause in io_lib_fread:fread/4 when running out of input before format

Klas Johansson <>
Wed Jul 20 12:11:45 CEST 2011


Hi,

Stumbled upon a bug in io_lib (rather in io_lib_fread) when parsing
ISO 8601 timestamps.

Given that I parse something like "2009-10-17T18:37:26Z" but (by
mistake) leave out the trailing "Z" in the input string I get a
function clause:

    1> io_lib:fread("~4d-~2d-~2dT~2d:~2d:~2dZ", "2009-10-17T18:37:26").
    ** exception error: no function clause matching
                        io_lib_fread:fread("Z",[],19,[26,37,18,17,10,2009])

Same thing if I stop at any of the non-control characters (like a dash
or colon):

    2> io_lib:fread("~4d-~2d-~2dT~2d:~2d:~2dZ", "2009").
    ** exception error: no function clause matching
                        io_lib_fread:fread("-~2d-~2dT~2d:~2d:~2dZ",[],4,[2009])

Minimal (and silly) test case:

    3> io_lib:fread("Z", "").
    ** exception error: no function clause matching
                    io_lib_fread:fread("Z",[],0,[])

I'd expect something like this:

    4> io_lib:fread("~4d-~2d-~2dT~2d:~2d:~2dZ", "2009").
    {more,"~2d-~2dT~2d:~2d:~2dZ",4,[2009]}

Should be easy to fix, but I've resorted to using re.erl for now.


Cheers,
Klas


More information about the erlang-bugs mailing list