]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Make sure control command bodies are always followed by a NUL
authorNick Mathewson <nickm@torproject.org>
Thu, 4 Nov 2004 22:30:49 +0000 (22:30 +0000)
committerNick Mathewson <nickm@torproject.org>
Thu, 4 Nov 2004 22:30:49 +0000 (22:30 +0000)
svn:r2678

src/or/buffers.c

index 35f1ed5672554a62103b00f90d10ba45a6df244e..4b6edd044ea8bc33b737741ee961bbbe77ad73bf 100644 (file)
@@ -636,7 +636,16 @@ int fetch_from_buf_socks(buf_t *buf, socks_request_t *req) {
   }
 }
 
-/* DOCDOC: 1 if complete, 0 if pending, -1 on error. */
+/** If there is a complete control message waiting on buf, then store
+ * its contents into *<b>type_out</b>, store its body's length into
+ * *<b>len_out</b>, allocate and store a string for its body into
+ * *<b>body_out</b>, and return -1.  (body_out will always be NUL-terminated,
+ * even if the control message body doesn't end with NUL.)
+ *
+ * If there is not a complete control message waiting, return 0.
+ *
+ * Return -1 on error.
+ */
 int fetch_from_buf_control(buf_t *buf, uint16_t *len_out, uint16_t *type_out,
                            char **body_out)
 {
@@ -657,8 +666,9 @@ int fetch_from_buf_control(buf_t *buf, uint16_t *len_out, uint16_t *type_out,
   *len_out = len;
   *type_out = ntohs(get_uint16(buf->mem+2));
   if (len) {
-    *body_out = tor_malloc(len);
+    *body_out = tor_malloc(len+1);
     memcpy(*body_out, buf->mem+4, len);
+    body_out[len] = '\0';
   } else {
     *body_out = NULL;
   }