[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r13618: Add asserts and refactor some comparisons in order to fix so (in tor/trunk: . src/or)



Author: nickm
Date: 2008-02-20 11:57:39 -0500 (Wed, 20 Feb 2008)
New Revision: 13618

Modified:
   tor/trunk/
   tor/trunk/src/or/buffers.c
   tor/trunk/src/or/dirvote.c
   tor/trunk/src/or/routerparse.c
Log:
 r18255@catbus:  nickm | 2008-02-20 11:44:55 -0500
 Add asserts and refactor some comparisons in order to fix some veracode-identified issues. Note a bug in buffers.c



Property changes on: tor/trunk
___________________________________________________________________
 svk:merge ticket from /tor/trunk [r18255] on 8246c3cf-6607-4228-993b-4d95d33730f1

Modified: tor/trunk/src/or/buffers.c
===================================================================
--- tor/trunk/src/or/buffers.c	2008-02-20 13:46:05 UTC (rev 13617)
+++ tor/trunk/src/or/buffers.c	2008-02-20 16:57:39 UTC (rev 13618)
@@ -1019,8 +1019,10 @@
 buf_find_pos_of_char(char ch, buf_pos_t *out)
 {
   const chunk_t *chunk;
-  int offset = 0;
-  int pos = out->pos;
+  int offset = 0; /*XXXX020 should this be pos_absolute? Otherwise, bug. */
+  int pos;
+  tor_assert(out && out->chunk && out->pos < (int)out->chunk->datalen);
+  pos = out->pos;
   for (chunk = out->chunk; chunk; chunk = chunk->next) {
     char *cp = memchr(chunk->data+pos, ch, chunk->datalen-pos);
     if (cp) {

Modified: tor/trunk/src/or/dirvote.c
===================================================================
--- tor/trunk/src/or/dirvote.c	2008-02-20 13:46:05 UTC (rev 13617)
+++ tor/trunk/src/or/dirvote.c	2008-02-20 16:57:39 UTC (rev 13618)
@@ -1787,16 +1787,17 @@
     char *new_detached =
       networkstatus_get_detached_signatures(pending_consensus);
     const char *src;
-    char *dst;
+    char *dst, *dst_end;
     size_t new_consensus_len =
       strlen(pending_consensus_body) + strlen(new_detached) + 1;
     pending_consensus_body = tor_realloc(pending_consensus_body,
                                          new_consensus_len);
+    dst_end = pending_consensus_body + new_consensus_len;
     dst = strstr(pending_consensus_body, "directory-signature ");
     tor_assert(dst);
     src = strstr(new_detached, "directory-signature ");
     tor_assert(src);
-    strlcpy(dst, src, new_consensus_len - (dst-pending_consensus_body));
+    strlcpy(dst, src, dst_end-dst);
 
     /* We remove this block once it has failed to crash for a while.  But
      * unless it shows up in profiles, we're probably better leaving it in,

Modified: tor/trunk/src/or/routerparse.c
===================================================================
--- tor/trunk/src/or/routerparse.c	2008-02-20 13:46:05 UTC (rev 13617)
+++ tor/trunk/src/or/routerparse.c	2008-02-20 16:57:39 UTC (rev 13618)
@@ -2704,6 +2704,7 @@
 
   /* Set *s to first token, eol to end-of-line, next to after first token */
   *s = eat_whitespace_eos(*s, eos); /* eat multi-line whitespace */
+  tor_assert(eos >= *s);
   eol = memchr(*s, '\n', eos-*s);
   if (!eol)
     eol = eos;
@@ -2775,11 +2776,13 @@
 
   /* Check whether there's an object present */
   *s = eat_whitespace_eos(eol, eos);  /* Scan from end of first line */
+  tor_assert(eos >= *s);
   eol = memchr(*s, '\n', eos-*s);
   if (!eol || eol-*s<11 || strcmpstart(*s, "-----BEGIN ")) /* No object. */
     goto check_object;
 
   obstart = *s; /* Set obstart to start of object spec */
+  tor_assert(eol >= (*s+16));
   if (*s+11 >= eol-5 || memchr(*s+11,'\0',eol-*s-16) || /* no short lines, */
       strcmp_len(eol-5, "-----", 5)) {          /* nuls or invalid endings */
     RET_ERR("Malformed object: bad begin line");
@@ -2793,6 +2796,7 @@
   if (!next) {
     RET_ERR("Malformed object: missing object end line");
   }
+  tor_assert(eos >= next);
   eol = memchr(next, '\n', eos-next);
   if (!eol)  /* end-of-line marker, or eos if there's no '\n' */
     eol = eos;