ietf-tools / xml2rfc

Generate RFCs and IETF drafts from document source in XML according to the IETF xml2rfc v2 and v3 vocabularies
https://ietf-tools.github.io/xml2rfc/
BSD 3-Clause "New" or "Revised" License
68 stars 38 forks source link

Empty xref / relfref section with non empty relative attribute crashes xml2rfc #1053

Open kesara opened 11 months ago

kesara commented 11 months ago

Describe the issue

Example draft:

<?xml version="1.0" encoding="utf-8"?>
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-foobar-00" category="exp" submissionType="IETF">
  <front>
    <title abbrev="foobar">Foobar</title>
    <author initials="J." surname="Doe" fullname="Jane Doe">
      <address>
        <postal>
          <country>New Zealand</country>
        </postal>
        <email>none@fake.nz</email>
      </address>
    </author>

    <abstract>
      <t>Foobar</t>
    </abstract>
  </front>

  <middle>
    <section anchor="introduction" title="Introduction">
      <t>
     Registration policy (see <relref target="RFC8126" section="" relative="section-4" derivedLink="https://www.rfc-editor.org/rfc/rfc8126.html#section-4">RFC 8126 section 4</relref> for details):
        </t>
    </section>
  </middle>

  <back>
 <references><name>Normative References</name>
  <reference anchor="RFC8126">
   <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author></author>
   </front>
   <seriesInfo name='RFC' value='8126'/>
  </reference>
 </references>
  </back>
</rfc>

The empty section="" causes xml2rfc crash without providing useful output. This bug doesn't affect the text output. NOTE that relref is a deprecated element in xml2rfc v3.

CC @dthaler

Code of Conduct

dthaler commented 11 months ago

NOTE that relref is a deprecated element in xml2rfc v3.

Where is that stated? RFC 7991 doesn't say that anywhere I can find, and in fact says relref is new in xml2rfc v3.

cabo commented 11 months ago

On 2023-11-07, at 18:50, Dave Thaler @.***> wrote:

NOTE that relref is a deprecated element in xml2rfc v3.

Where is that stated? RFC 7991 doesn't say that anywhere I can find, and in fact says relref is new in xml2rfc v3.

Well, RFCXML has changed in the last 7 years. Unfortunately, the documents haven’t kept up, because we didn’t have RSAB/RSWG yet.

First we had https://datatracker.ietf.org/doc/html/draft-levkowetz-xml2rfc-v3-implementation-notes-13

then https://www.ietf.org/archive/id/draft-iab-rfc7991bis-04.html#name-elements-and-attributes-dep (Check the list of deprecations.)

The only real documentation of RFCXML at this point is in the xml2rfc source:

https://ietf-tools.github.io/xml2rfc/

Section 3.1 https://ietf-tools.github.io/xml2rfc/#name-elements-from-v2-that-have- is slightly broken :-)

Grüße, Carsten

dthaler commented 11 months ago

This issue isn't specific to relref. If relref is changed to xref, the same issue still occurs.

kesara commented 11 months ago

@dthaler Yeah, the bug exists in both relref and xref when the section is empty and relative is not empty. xml2rfc should not crash but rather warn or spit out an error in these cases.

dthaler commented 11 months ago

In RST, links look like this:

`RFC 8126 section 4 <https://www.rfc-editor.org/rfc/rfc8126.html#section-4>`_

What should this look like in XML?
From my reading of https://www.ietf.org/archive/id/draft-iab-rfc7991bis-04.html#element.xref, is the following the right thing?

<xref target="RFC8126" section="4" relative="#section-4" derivedLink="https://www.rfc-editor.org/rfc/rfc8126.html#section-4">RFC 8126</xref>
kesara commented 11 months ago

The bare minimum required is <xref target="RFC8126" section="4"/> to get Section 4 of [RFC8126]. You can get customized results by using the sectionFormat attribute.

cabo commented 11 months ago
<xref target="RFC8126" section="4" relative="#section-4" derivedLink="https://www.rfc-editor.org/rfc/rfc8126.html#section-4">RFC 8126</xref>

Better let xml2rfc do the derivedLink=. For RFCs, you don't have to give a relative=, xml2rfc will do that for you (and implement its arcane convention for this).

<xref target="RFC8126" section="4" >RFC 8126</xref>

add sectionFormat to taste.