{
              warn (_("section '%s' has unsupported compress type: %d\n"),
                    printable_section_name (filedata, section), chdr.ch_type);
-             return FALSE;
+             goto error_out;
            }
          uncompressed_size = chdr.ch_size;
          start += compression_header_size;
            {
              error (_("Unable to decompress section %s\n"),
                     printable_section_name (filedata, section));
-             return FALSE;
+             goto error_out;
            }
        }
       else
 
   putchar ('\n');
   return TRUE;
+
+error_out:
+  free (real_start);
+  return FALSE;
 }
 
 static bfd_boolean
            {
              warn (_("section '%s' has unsupported compress type: %d\n"),
                    printable_section_name (filedata, section), chdr.ch_type);
-             return FALSE;
+             goto error_out;
            }
          uncompressed_size = chdr.ch_size;
          start += compression_header_size;
              error (_("Unable to decompress section %s\n"),
                     printable_section_name (filedata, section));
              /* FIXME: Print the section anyway ?  */
-             return FALSE;
+             goto error_out;
            }
        }
       else
   if (relocate)
     {
       if (! apply_relocations (filedata, section, start, section_size, NULL, NULL))
-       return FALSE;
+       goto error_out;
     }
   else
     {
 
   putchar ('\n');
   return TRUE;
+
+ error_out:
+  free (real_start);
+  return FALSE;
 }
 
 static ctf_sect_t *
       if (align < 4)
         align = 4;
       else if (align != 4 && align != 8)
-        continue;
+       {
+         free (enote);
+         continue;
+       }
 
       end = (char *) enote + length;
       data_remaining = end - (char *) enote;
              warn (_("\
 malformed note encountered in section %s whilst scanning for build-id note\n"),
                    printable_section_name (filedata, shdr));
+             free (enote);
               continue;
             }
           data_remaining -= min_notesz;
              warn (_("\
 malformed note encountered in section %s whilst scanning for build-id note\n"),
                    printable_section_name (filedata, shdr));
+             free (enote);
               continue;
             }
           data_remaining -= min_notesz;
          warn (_("\
 malformed note encountered in section %s whilst scanning for build-id note\n"),
                printable_section_name (filedata, shdr));
+         free (enote);
           continue;
         }
 
 
           build_id = malloc (inote.descsz * 2 + 1);
           if (build_id == NULL)
-           return NULL;
+           {
+             free (enote);
+             return NULL;
+           }
 
           for (j = 0; j < inote.descsz; ++j)
             sprintf (build_id + (j * 2), "%02x", inote.descdata[j] & 0xff);
           build_id[inote.descsz * 2] = '\0';
+         free (enote);
 
           return (unsigned char *) build_id;
         }
+      free (enote);
     }
 
   return NULL;
       if (pnotes)
        {
          if (! apply_relocations (filedata, section, (unsigned char *) pnotes, length, NULL, NULL))
-           return FALSE;
+           {
+             free (pnotes);
+             return FALSE;
+           }
        }
     }
   else