[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Nbd] [PATCH] nbd-server: handle port number string conversion errors



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 <tuomasjjrasanen@...1261...>
---
 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




Reply to: