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

Reply via email to