diff options
Diffstat (limited to 'src/util/url.c')
-rw-r--r-- | src/util/url.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/util/url.c b/src/util/url.c index 934bb058a..f2298c0f1 100644 --- a/src/util/url.c +++ b/src/util/url.c | |||
@@ -84,8 +84,12 @@ static void | |||
84 | buffer_write_urlencode (struct GNUNET_Buffer *buf, | 84 | buffer_write_urlencode (struct GNUNET_Buffer *buf, |
85 | const char *s) | 85 | const char *s) |
86 | { | 86 | { |
87 | size_t ulen; | ||
88 | |||
89 | ulen = urlencode_len (s); | ||
90 | GNUNET_assert (ulen < ulen + 1); | ||
87 | GNUNET_buffer_ensure_remaining (buf, | 91 | GNUNET_buffer_ensure_remaining (buf, |
88 | urlencode_len (s) + 1); | 92 | ulen + 1); |
89 | for (size_t i = 0; i < strlen (s); i++) | 93 | for (size_t i = 0; i < strlen (s); i++) |
90 | { | 94 | { |
91 | if (GNUNET_YES == is_reserved (s[i])) | 95 | if (GNUNET_YES == is_reserved (s[i])) |
@@ -139,6 +143,8 @@ calculate_argument_length (va_list args) | |||
139 | { | 143 | { |
140 | char *key; | 144 | char *key; |
141 | char *value; | 145 | char *value; |
146 | size_t vlen; | ||
147 | size_t klen; | ||
142 | 148 | ||
143 | key = va_arg (ap, | 149 | key = va_arg (ap, |
144 | char *); | 150 | char *); |
@@ -148,10 +154,12 @@ calculate_argument_length (va_list args) | |||
148 | char *); | 154 | char *); |
149 | if (NULL == value) | 155 | if (NULL == value) |
150 | continue; | 156 | continue; |
151 | GNUNET_assert ( (len <= len + urlencode_len (value)) && | 157 | vlen = urlencode_len (value); |
152 | (len <= len + urlencode_len (value) + strlen (key)) && | 158 | klen = strlen (key); |
153 | (len < len + urlencode_len (value) + strlen (key) + 2) ); | 159 | GNUNET_assert ( (len <= len + vlen) && |
154 | len += urlencode_len (value) + strlen (key) + 2; | 160 | (len <= len + vlen + klen) && |
161 | (len < len + vlen + klen + 2) ); | ||
162 | len += vlen + klen + 2; | ||
155 | } | 163 | } |
156 | va_end (ap); | 164 | va_end (ap); |
157 | return len; | 165 | return len; |