Thank you for a quick feedback.
Valid IP addresses necessarily need not look βvalidβ. IP addresses can be represented in idefinitely different ways, therefore it cannot be determined if a value is an IP address or not.
Not sure if the above statement has any bearing to this problem. It is clear that inet module can establish if something is valid IP address or not.
For example:
(0) inet:getaddr( β375.001.001.001β, inet ).
{error,nxdomain}
inet:getaddr( βgoogle.comβ, inet ).
{ok,{142,251,47,174}}
inet:getaddr( βgoogle.comxβ, inet ).
{error,nxdomain}
If I were to speculate, Iβd say that whenever something does not look as βdot-IPv4" address, inet attempts to resolve it via DNS lookup.
The problem is that (under some circumstances) inet module βinventsβ values for a valid βdot-IP Addressβ.
For example:
(A1) inet:getaddr( β50.1.1.1β, inet ).
{ok,{50,1,1,1}}
and
(A2) inet:getaddr( β050.001.001.001β, inet ).
{ok,{40,1,1,1}}
Should be considered as equivalents, however, (A2) for some reason converts β050β to 40!
A similar behaviour is exhibited wherever the βmiddleβ digit is preceded by a leading zero, but itself is not a zero (as in β5β in β050β):
(B1) inet:getaddr( β001.001.001.050β, inet ).
{ok,{1,1,1,40}}
B1) inet:getaddr( β001.001.050.001β, inet ).
{ok,{1,1,40, 1}}
etc.
Worse Yet
(C1) inet:getaddr( β050.001.001.001β, inet ).
{ok,{40,1,1,1}}
(C2) inet:getaddr( β040.001.001.001β, inet ).
{ok,{32,1,1,1}}
(C3) inet:getaddr( β030.001.001.001β, inet ).
{ok,{24,1,1,1}}
(C4) inet:getaddr( β020.001.001.001β, inet ).
{ok,{16,1,1,1}}
(C5) inet:getaddr( β010.001.001.001β, inet ).
{ok,{8,1,1,1}}
(C6) inet:getaddr( β000.001.001.001β, inet ).
{ok,{0,1,1,1}}
The above case (C1) reduces the original value by 10; (C2) by 8; (C3) by 6; (C4) by 4 and (C5) by 2, and (C6) by 0, thus returns a correct value.
But then, even that is not done consistently:
inet:getaddr( β57.001.001.001β, inet ).
{ok,{57,1,1,1}}
inet:getaddr( β057.001.001.001β, inet ).
{ok,{47,1,1,1}}
inet:getaddr( β58.001.001.001β, inet ).
{ok,{58,1,1,1}}
inet:getaddr( β058.001.001.001β, inet ).
{error,nxdomain}
Or:
inet:getaddr( β1.001.001.57β, inet ).
{ok,{1,1,1,57}}
inet:getaddr( β1.001.001.057β, inet ).
{ok,{1,1,1,47}}
inet:getaddr( β1.001.001.58β, inet ).
{ok,{1,1,1,58}}
inet:getaddr( β1.001.001.058β, inet ).
{error,nxdomain}
It seems to me like an optimisation that went wrong somewhere.
Go figure, but clearly a bug.
Kind regards
V/