def METHOD_NAME(fname, short_fname, txt, match, rfcs, cache, problem_count_in_file_thus_far, full_check):
    """Look at a link and return an error string about it, if any."""
    error = None
    # What's exactly the uri as it appears in the markdown link?
    full_uri = match.group(2).strip()
    if full_uri.startswith('<') and full_uri.endswith('>'):
        full_uri = full_uri[1:-1].strip()
    uri = full_uri
    try:
        if uri in cache:
            error, content = cache[uri]
        else:
            content = None
            ct = "text/markdown"
            # Split into most-of-uri + fragment
            fragment = None
            i = uri.find('#')
            if i > -1:
                fragment = uri[i + 1:]
                uri = uri[:i]
            # Now look at what type of URI it is.
            if uri.startswith('http'):
                if not full_check:
                    return None
                else:
                    if should_skip_website(uri):
                        return None
                    error, ct = handle_web_resource(uri, rfcs, cache)
            elif uri.startswith('mailto:') or EMAIL_PAT.match(uri):
                return None
            # If URI is empty, then the URI is relative to the open file, so it was probably a pure fragment
            elif uri == '':
                content = txt
            else:
                error, content, uri = handle_local_file(fname, uri, cache)
            # If we got this far without an error, the only other thing to check is whether the fragment
            # is valid.
            if (not error) and fragment:
                cacheable = '%s#%s' % (uri, fragment)
                if cacheable in cache:
                    error, content = cache[cacheable]
                else:
                    if ct and content and (not fragment_in_content(fragment, content, ct)):
                        error = "#%s not in %s content" % (fragment, ct)
                    # Cache what we learned about the specific URI+fragment
                    cache[cacheable] = (error, None)
    except KeyboardInterrupt:
        sys.exit(1)
    except BaseException:
        error = traceback.format_exc()
    if error:
        alt = match.group(1).strip()
        if len(alt) > 20:
            alt = alt[:20] + '...'
        if problem_count_in_file_thus_far == 0:
            print(short_fname + ':')
        print("    [%s](%s) %s" % (alt, full_uri, error))
    return error