diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-01-04 22:42:55 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-01-04 22:42:55 +0100 |
commit | a90bc78b266ee8945b8e289e94f2f7503b18c3e1 (patch) | |
tree | e86a7b17233e9222292800e2e3e5c0c88220c120 /src/dns | |
parent | 23a95ded83313c8df50c5c34e0c12469e056545c (diff) | |
download | gnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.tar.gz gnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.zip |
avoid freeing uninit ptr on error path
Diffstat (limited to 'src/dns')
-rw-r--r-- | src/dns/dnsparser.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/dns/dnsparser.c b/src/dns/dnsparser.c index 30d9245ff..1fe6f595f 100644 --- a/src/dns/dnsparser.c +++ b/src/dns/dnsparser.c | |||
@@ -1170,7 +1170,10 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
1170 | trc = GNUNET_NO; | 1170 | trc = GNUNET_NO; |
1171 | for (i=0;i<p->num_queries;i++) | 1171 | for (i=0;i<p->num_queries;i++) |
1172 | { | 1172 | { |
1173 | ret = GNUNET_DNSPARSER_builder_add_query (tmp, sizeof (tmp), &off, &p->queries[i]); | 1173 | ret = GNUNET_DNSPARSER_builder_add_query (tmp, |
1174 | sizeof (tmp), | ||
1175 | &off, | ||
1176 | &p->queries[i]); | ||
1174 | if (GNUNET_SYSERR == ret) | 1177 | if (GNUNET_SYSERR == ret) |
1175 | return GNUNET_SYSERR; | 1178 | return GNUNET_SYSERR; |
1176 | if (GNUNET_NO == ret) | 1179 | if (GNUNET_NO == ret) |
@@ -1182,7 +1185,10 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
1182 | } | 1185 | } |
1183 | for (i=0;i<p->num_answers;i++) | 1186 | for (i=0;i<p->num_answers;i++) |
1184 | { | 1187 | { |
1185 | ret = add_record (tmp, sizeof (tmp), &off, &p->answers[i]); | 1188 | ret = add_record (tmp, |
1189 | sizeof (tmp), | ||
1190 | &off, | ||
1191 | &p->answers[i]); | ||
1186 | if (GNUNET_SYSERR == ret) | 1192 | if (GNUNET_SYSERR == ret) |
1187 | return GNUNET_SYSERR; | 1193 | return GNUNET_SYSERR; |
1188 | if (GNUNET_NO == ret) | 1194 | if (GNUNET_NO == ret) |
@@ -1194,7 +1200,10 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
1194 | } | 1200 | } |
1195 | for (i=0;i<p->num_authority_records;i++) | 1201 | for (i=0;i<p->num_authority_records;i++) |
1196 | { | 1202 | { |
1197 | ret = add_record (tmp, sizeof (tmp), &off, &p->authority_records[i]); | 1203 | ret = add_record (tmp, |
1204 | sizeof (tmp), | ||
1205 | &off, | ||
1206 | &p->authority_records[i]); | ||
1198 | if (GNUNET_SYSERR == ret) | 1207 | if (GNUNET_SYSERR == ret) |
1199 | return GNUNET_SYSERR; | 1208 | return GNUNET_SYSERR; |
1200 | if (GNUNET_NO == ret) | 1209 | if (GNUNET_NO == ret) |
@@ -1206,7 +1215,10 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
1206 | } | 1215 | } |
1207 | for (i=0;i<p->num_additional_records;i++) | 1216 | for (i=0;i<p->num_additional_records;i++) |
1208 | { | 1217 | { |
1209 | ret = add_record (tmp, sizeof (tmp), &off, &p->additional_records[i]); | 1218 | ret = add_record (tmp, |
1219 | sizeof (tmp), | ||
1220 | &off, | ||
1221 | &p->additional_records[i]); | ||
1210 | if (GNUNET_SYSERR == ret) | 1222 | if (GNUNET_SYSERR == ret) |
1211 | return GNUNET_SYSERR; | 1223 | return GNUNET_SYSERR; |
1212 | if (GNUNET_NO == ret) | 1224 | if (GNUNET_NO == ret) |
@@ -1219,11 +1231,15 @@ GNUNET_DNSPARSER_pack (const struct GNUNET_DNSPARSER_Packet *p, | |||
1219 | 1231 | ||
1220 | if (GNUNET_YES == trc) | 1232 | if (GNUNET_YES == trc) |
1221 | dns.flags.message_truncated = 1; | 1233 | dns.flags.message_truncated = 1; |
1222 | GNUNET_memcpy (tmp, &dns, sizeof (struct GNUNET_TUN_DnsHeader)); | 1234 | GNUNET_memcpy (tmp, |
1235 | &dns, | ||
1236 | sizeof (struct GNUNET_TUN_DnsHeader)); | ||
1223 | 1237 | ||
1224 | *buf = GNUNET_malloc (off); | 1238 | *buf = GNUNET_malloc (off); |
1225 | *buf_length = off; | 1239 | *buf_length = off; |
1226 | GNUNET_memcpy (*buf, tmp, off); | 1240 | GNUNET_memcpy (*buf, |
1241 | tmp, | ||
1242 | off); | ||
1227 | if (GNUNET_YES == trc) | 1243 | if (GNUNET_YES == trc) |
1228 | return GNUNET_NO; | 1244 | return GNUNET_NO; |
1229 | return GNUNET_OK; | 1245 | return GNUNET_OK; |