aboutsummaryrefslogtreecommitdiff
path: root/src/dns
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2018-01-04 22:42:55 +0100
committerChristian Grothoff <christian@grothoff.org>2018-01-04 22:42:55 +0100
commita90bc78b266ee8945b8e289e94f2f7503b18c3e1 (patch)
treee86a7b17233e9222292800e2e3e5c0c88220c120 /src/dns
parent23a95ded83313c8df50c5c34e0c12469e056545c (diff)
downloadgnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.tar.gz
gnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.zip
avoid freeing uninit ptr on error path
Diffstat (limited to 'src/dns')
-rw-r--r--src/dns/dnsparser.c28
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;