g_strdup_printf() tries to allocate a string large enough to hold the string representation of the passed value and coverts the value to string. It returns NULL if memory allocation fails, or some other error occurs. Previously, NULL was interpreted as "modern style socket not needed for this export" by returning zero to the caller, which was utterly wrong.
Signed-off-by: Tuomas Räsänen <[email protected]> --- nbd-server.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/nbd-server.c b/nbd-server.c index feb0ca6..69ee2a4 100644 --- a/nbd-server.c +++ b/nbd-server.c @@ -2408,9 +2408,14 @@ int setup_serve(SERVER *const serve, GError **const gerror) { hints.ai_socktype = SOCK_STREAM; hints.ai_family = serve->socket_family; - port = g_strdup_printf ("%d", serve->port); - if (port == NULL) - return 0; + port = g_strdup_printf("%d", serve->port); + if (!port) { + g_set_error(gerror, NBDS_ERR, NBDS_ERR_SYS, + "failed to open an export socket: " + "failed to convert a port number to a string: %s", + strerror(errno)); + goto out; + } e = getaddrinfo(serve->listenaddr,port,&hints,&ai); -- 1.7.10.4 ------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnnow-d2d _______________________________________________ Nbd-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nbd-general
