Browse Source

netbios_session: Fail when packet_append fails

Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Hugo Beauzée-Luyssen 9 years ago
parent
commit
5230929f4b
1 changed files with 6 additions and 3 deletions
  1. 6 3
      src/netbios_session.c

+ 6 - 3
src/netbios_session.c

@@ -113,7 +113,7 @@ int               netbios_session_connect(struct in_addr *addr,
         int direct_tcp)
         int direct_tcp)
 {
 {
     ssize_t                   recv_size;
     ssize_t                   recv_size;
-    char                      *encoded_name;
+    char                      *encoded_name = NULL;
 
 
     assert(s != NULL && s->packet != NULL);
     assert(s != NULL && s->packet != NULL);
 
 
@@ -132,10 +132,12 @@ int               netbios_session_connect(struct in_addr *addr,
         netbios_session_packet_init(s);
         netbios_session_packet_init(s);
         s->packet->opcode = NETBIOS_OP_SESSION_REQ;
         s->packet->opcode = NETBIOS_OP_SESSION_REQ;
         encoded_name = netbios_name_encode(name, 0, NETBIOS_FILESERVER);
         encoded_name = netbios_name_encode(name, 0, NETBIOS_FILESERVER);
-        netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1);
+        if (!netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1))
+            goto error;
         free(encoded_name);
         free(encoded_name);
         encoded_name = netbios_name_encode("LIBDSM", 0, NETBIOS_WORKSTATION);
         encoded_name = netbios_name_encode("LIBDSM", 0, NETBIOS_WORKSTATION);
-        netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1);
+        if (!netbios_session_packet_append(s, encoded_name, strlen(encoded_name) + 1))
+            goto error;
         free(encoded_name);
         free(encoded_name);
 
 
         s->state = NETBIOS_SESSION_CONNECTING;
         s->state = NETBIOS_SESSION_CONNECTING;
@@ -160,6 +162,7 @@ int               netbios_session_connect(struct in_addr *addr,
     return 1;
     return 1;
 
 
 error:
 error:
+    free(encoded_name);
     s->state = NETBIOS_SESSION_ERROR;
     s->state = NETBIOS_SESSION_ERROR;
     return 0;
     return 0;
 }
 }