aboutsummaryrefslogtreecommitdiff
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
parent23a95ded83313c8df50c5c34e0c12469e056545c (diff)
downloadgnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.tar.gz
gnunet-a90bc78b266ee8945b8e289e94f2f7503b18c3e1.zip
avoid freeing uninit ptr on error path
-rw-r--r--src/dns/dnsparser.c28
-rw-r--r--src/gns/gnunet-service-gns_resolver.c23
2 files changed, 37 insertions, 14 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;
diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c
index 54d7ff94b..e14a05d45 100644
--- a/src/gns/gnunet-service-gns_resolver.c
+++ b/src/gns/gnunet-service-gns_resolver.c
@@ -1019,6 +1019,7 @@ recursive_dns_resolution (struct GNS_ResolverHandle *rh)
1019 struct GNUNET_DNSPARSER_Packet *p; 1019 struct GNUNET_DNSPARSER_Packet *p;
1020 char *dns_request; 1020 char *dns_request;
1021 size_t dns_request_length; 1021 size_t dns_request_length;
1022 int ret;
1022 1023
1023 ac = rh->ac_tail; 1024 ac = rh->ac_tail;
1024 GNUNET_assert (NULL != ac); 1025 GNUNET_assert (NULL != ac);
@@ -1051,11 +1052,16 @@ recursive_dns_resolution (struct GNS_ResolverHandle *rh)
1051 UINT16_MAX); 1052 UINT16_MAX);
1052 p->flags.opcode = GNUNET_TUN_DNS_OPCODE_QUERY; 1053 p->flags.opcode = GNUNET_TUN_DNS_OPCODE_QUERY;
1053 p->flags.recursion_desired = 1; 1054 p->flags.recursion_desired = 1;
1054 if (GNUNET_OK != 1055 ret = GNUNET_DNSPARSER_pack (p,
1055 GNUNET_DNSPARSER_pack (p, 1024, &dns_request, &dns_request_length)) 1056 1024,
1057 &dns_request,
1058 &dns_request_length);
1059 if (GNUNET_OK != ret)
1056 { 1060 {
1057 GNUNET_break (0); 1061 GNUNET_break (0);
1058 rh->proc (rh->proc_cls, 0, NULL); 1062 rh->proc (rh->proc_cls,
1063 0,
1064 NULL);
1059 GNS_resolver_lookup_cancel (rh); 1065 GNS_resolver_lookup_cancel (rh);
1060 } 1066 }
1061 else 1067 else
@@ -1071,7 +1077,8 @@ recursive_dns_resolution (struct GNS_ResolverHandle *rh)
1071 &fail_resolution, 1077 &fail_resolution,
1072 rh); 1078 rh);
1073 } 1079 }
1074 GNUNET_free (dns_request); 1080 if (GNUNET_SYSERR != ret)
1081 GNUNET_free (dns_request);
1075 GNUNET_DNSPARSER_free_packet (p); 1082 GNUNET_DNSPARSER_free_packet (p);
1076} 1083}
1077 1084
@@ -1462,10 +1469,10 @@ handle_gns_resolution_result (void *cls,
1462 vpn_ctx->rd_data = GNUNET_malloc (vpn_ctx->rd_data_size); 1469 vpn_ctx->rd_data = GNUNET_malloc (vpn_ctx->rd_data_size);
1463 vpn_ctx->rd_count = rd_count; 1470 vpn_ctx->rd_count = rd_count;
1464 GNUNET_assert (vpn_ctx->rd_data_size == 1471 GNUNET_assert (vpn_ctx->rd_data_size ==
1465 GNUNET_GNSRECORD_records_serialize (rd_count, 1472 (size_t) GNUNET_GNSRECORD_records_serialize (rd_count,
1466 rd, 1473 rd,
1467 vpn_ctx->rd_data_size, 1474 vpn_ctx->rd_data_size,
1468 vpn_ctx->rd_data)); 1475 vpn_ctx->rd_data));
1469 vpn_ctx->vpn_request = GNUNET_VPN_redirect_to_peer (vpn_handle, 1476 vpn_ctx->vpn_request = GNUNET_VPN_redirect_to_peer (vpn_handle,
1470 af, 1477 af,
1471 ntohs (vpn->proto), 1478 ntohs (vpn->proto),