View Issue Details

IDProjectCategoryView StatusLast Update
0009321GNUnetutil librarypublic2024-12-09 17:03
Reporterfefe Assigned Toschanzen Due Date
PrioritynormalSeverityminorReproducibilityhave not tried
Status closedResolutionfixed 
Target Version0.23.0Fixed in Version0.23.0 
Summary0009321: GNUNET_DNSPARSER_duplicate_cert_record uses strdup instead of memdup
Description
   882 struct GNUNET_DNSPARSER_CertRecord *
   883 GNUNET_DNSPARSER_duplicate_cert_record (
   884 const struct GNUNET_DNSPARSER_CertRecord *r)
   885 {
   886 struct GNUNET_DNSPARSER_CertRecord *dup = GNUNET_memdup (r, sizeof(*r));
   887
   888 dup->certificate_data = GNUNET_strdup (r->certificate_data);
   889 return dup;
   890 }

This looks wrong because here's where certificate_data came from:

   601 cert->certificate_size = udp_payload_length - (*off);
   602 cert->certificate_data = GNUNET_malloc (cert->certificate_size);
   603 GNUNET_memcpy (cert->certificate_data,
   604 &udp_payload[*off],
   605 cert->certificate_size);

Using strdup assumes there is a 0 terminator, which nobody guaranteed.
It could run off the end of the buffer, which we happen to know the size of. We should use it.
TagsNo tags attached.

Activities

schanzen

2024-11-04 18:26

administrator   ~0023659

Fix committed to master branch.

schanzen

2024-12-09 17:03

administrator   ~0023826

Released

Issue History

Date ModifiedUsernameFieldChange
2024-11-04 15:45fefeNew Issue
2024-11-04 18:26schanzen
2024-11-04 18:26schanzenNote Added: 0023659
2024-11-04 18:26schanzenAssigned To => schanzen
2024-11-04 18:26schanzenStatusnew => resolved
2024-11-04 18:26schanzenResolutionopen => fixed
2024-11-04 18:26schanzenTarget Version => 0.22.3
2024-11-14 08:43schanzenTarget Version0.22.3 => 0.23.0
2024-12-09 17:03schanzenFixed in Version => 0.23.0
2024-12-09 17:03schanzenNote Added: 0023826
2024-12-09 17:03schanzenStatusresolved => closed