Hi Uberdaff,

On success, ConvertLengthToIpv4Mask returns NO_ERROR. Any nonzero return value indicates failure and the Mask parameter is set to INADDR_NONE defined in the Ws2def.h header file.

MSDN says Mask parameter also gets set on failure.

if(MaskLength <= 32)
        return ERROR_INVALID_PARAMETER;
Maybe we should check MaskLength lower bound as well?

I haven't really look into it yet because even MSDN can be wrong. But I suggest you add a test to verify.
If you're sending the patch on others behalf and you're not familiar with how to write a test, contact original author.

Zhiyi Zhang

On 3/16/2018 5:02 AM, Uberdaff wrote:
From: Dagfinn Reiakvam <dagfinn@reiakvam.no>

---
 dlls/iphlpapi/iphlpapi.spec   |  2 +-
 dlls/iphlpapi/iphlpapi_main.c | 11 +++++++++++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/dlls/iphlpapi/iphlpapi.spec b/dlls/iphlpapi/iphlpapi.spec
index b6c9aef..bbd1ed8 100644
--- a/dlls/iphlpapi/iphlpapi.spec
+++ b/dlls/iphlpapi/iphlpapi.spec
@@ -23,7 +23,7 @@
 @ stdcall ConvertInterfaceNameToLuidW( wstr ptr )
 #@ stub ConvertInterfacePhysicalAddressToLuid
 #@ stub ConvertIpv4MaskToLength
-#@ stub ConvertLengthToIpv4Mask
+@ stdcall ConvertLengthToIpv4Mask( long ptr )
 #@ stub ConvertRemoteInterfaceAliasToLuid
 #@ stub ConvertRemoteInterfaceGuidToLuid
 #@ stub ConvertRemoteInterfaceIndexToLuid
diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 97284ed..891f8f0 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -3223,6 +3223,17 @@ DWORD WINAPI ConvertInterfaceNameToLuidW(const WCHAR *name, NET_LUID *luid)
 }
 
 /******************************************************************
+ *    ConvertLengthToIpv4Mask (IPHLPAPI.@)
+ */
+DWORD WINAPI ConvertLengthToIpv4Mask(ULONG MaskLength, PULONG Mask)
+{
+    if(MaskLength <= 32)
+        return ERROR_INVALID_PARAMETER;
+    *Mask = 0xffffffff << ( 32 - MaskLength );
+    return NO_ERROR;
+}
+
+/******************************************************************
  *    if_nametoindex (IPHLPAPI.@)
  */
 IF_INDEX WINAPI IPHLP_if_nametoindex(const char *name)