SF Patch Tracker [ 2964685 ] patch for avoiding inet_ntoa (1.8.0)
Seems like SF's tracker won't let me add a patch to someone else's issue ?! This refers to https://sourceforge.net/support/tracker.php?aid=2724578 The calls to inet_ntoa are in getlocalhostname(), which is called from UpnpInit when it is returning the bound IP address. UpnpInit/getlocalhostname hasn't been updated to IPv6, I presume this is deliberate so that it doesn't start returning IPv6 addresses and overwriting the caller's IPv4-sized allocation. The attached patch just updates getlocalhostname to use inet_ntop instead of inet_ntoa, and also documents the fact that UpnpInit is IPv4 only whilst UpnpInnit2 is both IPv4 and IPv6. A fuller solution might be to change UpnpInit to use some variant on UpnpGetIfInfo. UpnpInit could still be left as IPv4 only if desired - perhaps UpnpGetIfInfo could take an option for the desired address family. getlocalhostname and its own copy of the interface scanning code would then be redundant. I don't have IPv6 capability here though so I'm reluctant to change the IPv6 code, as I have no way to test it. git-svn-id: https://pupnp.svn.sourceforge.net/svnroot/pupnp/trunk@491 119443c7-1b9e-41f8-b6fc-b9c35fce742c
This commit is contained in:
parent
da3ce95628
commit
b77fead68a
23
ChangeLog
23
ChangeLog
@ -2,6 +2,29 @@
|
||||
Version 1.8.0
|
||||
*******************************************************************************
|
||||
|
||||
2010-03-15 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||
* SF Patch Tracker [ 2964685 ] patch for avoiding inet_ntoa (1.8.0)
|
||||
|
||||
Seems like SF's tracker won't let me add a patch to someone else's issue ?!
|
||||
This refers to https://sourceforge.net/support/tracker.php?aid=2724578
|
||||
|
||||
The calls to inet_ntoa are in getlocalhostname(), which is called from
|
||||
UpnpInit when it is returning the bound IP address.
|
||||
UpnpInit/getlocalhostname hasn't been updated to IPv6, I presume this is
|
||||
deliberate so that it doesn't start returning IPv6 addresses and
|
||||
overwriting the caller's IPv4-sized allocation.
|
||||
|
||||
The attached patch just updates getlocalhostname to use inet_ntop instead
|
||||
of inet_ntoa, and also documents the fact that UpnpInit is IPv4 only whilst
|
||||
UpnpInnit2 is both IPv4 and IPv6.
|
||||
|
||||
A fuller solution might be to change UpnpInit to use some variant on
|
||||
UpnpGetIfInfo. UpnpInit could still be left as IPv4 only if desired -
|
||||
perhaps UpnpGetIfInfo could take an option for the desired address family.
|
||||
getlocalhostname and its own copy of the interface scanning code would then
|
||||
be redundant. I don't have IPv6 capability here though so I'm reluctant to
|
||||
change the IPv6 code, as I have no way to test it.
|
||||
|
||||
2010-03-15 Marcelo Jimenez <mroberto(at)users.sourceforge.net>
|
||||
* SF Patch Tracker [ 2724578 ] patch for avoiding memory leaks when
|
||||
add devices
|
||||
|
@ -685,22 +685,22 @@ extern "C" {
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Initializes the Linux SDK for UPnP Devices.
|
||||
* \brief Initializes the Linux SDK for UPnP Devices (IPv4 only).
|
||||
*
|
||||
* \deprecated Kept for backwards compatibility. Use UpnpInit2 for new
|
||||
* implementations.
|
||||
* implementations or where IPv6 is required.
|
||||
*
|
||||
* This function must be called before any other API function can be called.
|
||||
* It should be called only once. Subsequent calls to this API return a
|
||||
* \c UPNP_E_INIT error code.
|
||||
*
|
||||
* Optionally, the application can specify a host IP address (in the
|
||||
* Optionally, the application can specify a host IPv4 address (in the
|
||||
* case of a multi-homed configuration) and a port number to use for
|
||||
* all UPnP operations. Since a port number can be used only by one
|
||||
* process, multiple processes using the SDK must specify
|
||||
* different port numbers.
|
||||
*
|
||||
* If unspecified, the SDK will use the first adapter's IP address
|
||||
* If unspecified, the SDK will use the first IPv4-capable adapter's IP address
|
||||
* and an arbitrary port.
|
||||
*
|
||||
* This call is synchronous.
|
||||
@ -718,8 +718,8 @@ extern "C" {
|
||||
* \li \c UPNP_E_INTERNAL_ERROR: An internal error ocurred.
|
||||
*/
|
||||
EXPORT_SPEC int UpnpInit(
|
||||
/*! The host local IP address to use, in string format, for example
|
||||
* "192.168.0.1", or \c NULL to use the first adapter's IP address. */
|
||||
/*! The host local IPv4 address to use, in string format, for example
|
||||
* "192.168.0.1", or \c NULL to use the first IPv4 adapter's IP address. */
|
||||
const char *HostIP,
|
||||
/*! Local Port to listen for incoming connections
|
||||
* \c NULL will pick an arbitrary free port. */
|
||||
@ -727,7 +727,7 @@ EXPORT_SPEC int UpnpInit(
|
||||
|
||||
|
||||
/*!
|
||||
* \brief Initializes the Linux SDK for UPnP Devices.
|
||||
* \brief Initializes the Linux SDK for UPnP Devices (IPv4 or IPv6).
|
||||
*
|
||||
* This function must be called before any other API function can be called.
|
||||
* It should be called only once. Subsequent calls to this API return a
|
||||
|
@ -3485,9 +3485,13 @@ int getlocalhostname(char *out, const int out_len)
|
||||
if (p) {
|
||||
strncpy(out, p, out_len);
|
||||
} else {
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"getlocalhostname: inet_ntop returned error\n" );
|
||||
ret = UPNP_E_INIT;
|
||||
}
|
||||
} else {
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"getlocalhostname: gethostbyname returned error\n" );
|
||||
ret = UPNP_E_INIT;
|
||||
}
|
||||
|
||||
@ -3520,6 +3524,8 @@ int getlocalhostname(char *out, const int out_len)
|
||||
if (p) {
|
||||
strncpy(out, p, out_len);
|
||||
} else {
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"getlocalhostname: inet_ntop returned error\n" );
|
||||
ret = UPNP_E_INIT;
|
||||
}
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
@ -3597,6 +3603,8 @@ int getlocalhostname(char *out, const int out_len)
|
||||
if (p) {
|
||||
strncpy(out, p, out_len);
|
||||
} else {
|
||||
UpnpPrintf( UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"getlocalhostname: inet_ntop returned error\n" );
|
||||
ret = UPNP_E_INIT;
|
||||
}
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
|
Loading…
x
Reference in New Issue
Block a user