Index: /trunk/Makefile.in
===================================================================
--- /trunk/Makefile.in	(revision 447)
+++ /trunk/Makefile.in	(revision 448)
@@ -1805,5 +1805,5 @@
 sh_audit.o: $(srcsrc)/sh_audit.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_error.h $(srcinc)/sh_extern.h $(srcinc)/sh_utils.h 
 sh_registry.o: $(srcsrc)/sh_registry.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_unix.h $(srcinc)/sh_modules.h $(srcinc)/sh_hash.h $(srcinc)/sh_tiger.h 
-sh_ipvx.o: $(srcsrc)/sh_ipvx.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_static.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_ipvx.h 
+sh_ipvx.o: $(srcsrc)/sh_ipvx.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_static.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_ipvx.h $(srcinc)/CuTest.h 
 sh_restrict.o: $(srcsrc)/sh_restrict.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_mem.h $(srcinc)/sh_error_min.h $(srcinc)/sh_string.h $(srcinc)/sh_utils.h $(srcinc)/sh_restrict.h $(srcinc)/CuTest.h 
 sh_filetype.o: $(srcsrc)/sh_filetype.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_mem.h $(srcinc)/sh_error_min.h $(srcinc)/sh_utils.h 
Index: /trunk/depend.dep
===================================================================
--- /trunk/depend.dep	(revision 447)
+++ /trunk/depend.dep	(revision 448)
@@ -85,5 +85,5 @@
 sh_audit.o: $(srcsrc)/sh_audit.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_error.h $(srcinc)/sh_extern.h $(srcinc)/sh_utils.h 
 sh_registry.o: $(srcsrc)/sh_registry.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_unix.h $(srcinc)/sh_modules.h $(srcinc)/sh_hash.h $(srcinc)/sh_tiger.h 
-sh_ipvx.o: $(srcsrc)/sh_ipvx.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_static.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_ipvx.h 
+sh_ipvx.o: $(srcsrc)/sh_ipvx.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_static.h $(srcinc)/sh_pthread.h $(srcinc)/sh_utils.h $(srcinc)/sh_ipvx.h $(srcinc)/CuTest.h 
 sh_restrict.o: $(srcsrc)/sh_restrict.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_mem.h $(srcinc)/sh_error_min.h $(srcinc)/sh_string.h $(srcinc)/sh_utils.h $(srcinc)/sh_restrict.h $(srcinc)/CuTest.h 
 sh_filetype.o: $(srcsrc)/sh_filetype.c Makefile config_xor.h $(srcinc)/samhain.h $(srcinc)/sh_mem.h $(srcinc)/sh_error_min.h $(srcinc)/sh_utils.h 
Index: /trunk/depend.sum
===================================================================
--- /trunk/depend.sum	(revision 447)
+++ /trunk/depend.sum	(revision 448)
@@ -1,1 +1,1 @@
-3369499701
+3861086825
Index: /trunk/docs/Changelog
===================================================================
--- /trunk/docs/Changelog	(revision 447)
+++ /trunk/docs/Changelog	(revision 448)
@@ -1,4 +1,6 @@
 3.1.1:
 	* Disable inline asm on Cygwin (issue reported by Erik)
+	* Fix sh_ipvx_is_ipv4 such that numeric hostnames are not
+	  incorrectly recognised as IP address (reported by A. Hofland)
 
 3.1.0 (31-10-2013):
Index: /trunk/src/cutest_sh_tools.c
===================================================================
--- /trunk/src/cutest_sh_tools.c	(revision 447)
+++ /trunk/src/cutest_sh_tools.c	(revision 448)
@@ -114,5 +114,5 @@
   CuAssertTrue(tc, !sh_ipvx_is_numeric(input));
   input  = strdup("127");
-  CuAssertTrue(tc, sh_ipvx_is_numeric(input));
+  CuAssertTrue(tc, !sh_ipvx_is_numeric(input));
 }
 
Index: /trunk/src/sh_ipvx.c
===================================================================
--- /trunk/src/sh_ipvx.c	(revision 447)
+++ /trunk/src/sh_ipvx.c	(revision 448)
@@ -41,9 +41,26 @@
 {
   int j;
+  int count = 0;
   int len = sl_strlen(addr);
+  unsigned int a, b, c, d;
   
-  for (j = 0; j < len; ++j)
+  if (len > 15) /* 3*4 + 3 dots */
+    return (1 == 0);
+
+  for (j = 0; j < len; ++j) {
     if ( (addr[j] < '0' || addr[j] > '9') && addr[j] != '.')
       return (1 == 0);
+    if (addr[j] == '.') ++count;
+  }
+
+  if (count != 3)
+    return (1 == 0);
+
+  if (sscanf(addr, "%3u.%3u.%3u.%3u", &a, &b, &c, &d) != 4)
+    return( 1 == 0 );
+
+  if ((a|b|c|d) > 255) 
+    return( 1 == 0 );
+
   return (1 == 1);
 }
@@ -538,2 +555,38 @@
   return 0;
 }
+
+#ifdef SH_CUTEST
+#include <stdlib.h>
+#include "CuTest.h"
+
+void Test_ipvx (CuTest *tc) {
+
+  int result;
+
+  result = sh_ipvx_is_ipv4("123456789");
+  CuAssertTrue(tc, result == FALSE);
+
+  result = sh_ipvx_is_ipv4("123456789123...");
+  CuAssertTrue(tc, result == FALSE);
+
+  result = sh_ipvx_is_ipv4("123.456.789.123");
+  CuAssertTrue(tc, result == FALSE);
+
+  result = sh_ipvx_is_ipv4("123.156.189.254");
+  CuAssertTrue(tc, result == TRUE);
+
+  result = sh_ipvx_is_ipv4("255.255.255.255");
+  CuAssertTrue(tc, result == TRUE);
+
+  result = sh_ipvx_is_ipv4("0.0.0.0");
+  CuAssertTrue(tc, result == TRUE);
+
+  result = sh_ipvx_is_ipv4("0022.156.189.254");
+  CuAssertTrue(tc, result == FALSE);
+
+  result = sh_ipvx_is_ipv4("999999999.1.1.2");
+  CuAssertTrue(tc, result == FALSE);
+
+}
+#endif
+
