def METHOD_NAME(summary_path, name, report_info):
  """Returns a CoverageInformation entity with coverage stats populated."""
  date = datetime.datetime.strptime(
      report_info['report_date'],
      data_types.COVERAGE_INFORMATION_DATE_FORMAT).date()
  # |name| can be either a project qualified fuzz target name or a project name.
  cov_info = data_handler.get_coverage_information(
      name, date, create_if_needed=True)
  cov_info.fuzzer = name
  cov_info.date = date
  # Link to a per project report as long as we don't have per fuzzer reports.
  cov_info.html_report_url = report_info['html_report_url']
  summary = _read_json(summary_path)
  if not summary:
    # We can encounter empty JSON files for broken fuzz targets.
    return cov_info
  try:
    # Don't rely on the coverage data being well-formatted. Otherwise new
    # languages can break everything else.
    total_stats = summary['data'][0]['totals']
    cov_info.functions_covered = total_stats['functions']['covered']
    cov_info.functions_total = total_stats['functions']['count']
    cov_info.edges_covered = total_stats['regions']['covered']
    cov_info.edges_total = total_stats['regions']['count']
    return cov_info
  except KeyError:
    logs.log_error('Malformed code coverage for %s.' % name)
    return None