Zili Chen created TIKA-4977:
-------------------------------

             Summary: Rust .rs source is detected as 
application/rls-services+xml
                 Key: TIKA-4977
                 URL: https://issues.apache.org/jira/browse/TIKA-4977
             Project: Tika
          Issue Type: Bug
          Components: mime
    Affects Versions: 3.2.3
            Reporter: Zili Chen


A plain Rust source file is detected as application/rls-services+xml when its 
.rs filename is supplied, although content-only detection correctly returns 
text/plain.

Reproduced with tika-core 3.2.3. The same *.rs mapping remains in the current 
main branch (fe5ba58bc1bee4f37217c32a05a9b74db7fa51ba).

{code:java}
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
import org.apache.tika.Tika;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaCoreProperties;

byte[] source = "fn main() {}\n".getBytes(StandardCharsets.UTF_8);
Tika tika = new Tika();
System.out.println(tika.detect(source));

Metadata metadata = new Metadata();
metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, "main.rs");
System.out.println(tika.detect(new ByteArrayInputStream(source), metadata));
{code}

Actual output:
{noformat}
text/plain
application/rls-services+xml
{noformat}

Changing only the resource name to main.txt returns text/plain. Rust files with 
an Apache license comment behave the same way. PNG and PDF bytes named main.rs 
retain their binary MIME types, so this concerns the filename hint applied to 
otherwise plain text.

The MIME database maps *.rs to application/rls-services+xml:
https://github.com/apache/tika/blob/3.2.3/tika-core/src/main/resources/org/apache/tika/mime/tika-mimetypes.xml#L1010

That extension is legitimately registered for RLS XML by RFC 4826:
https://www.iana.org/assignments/media-types/application/rls-services%2Bxml

Please distinguish Rust source from RLS XML when the .rs extension is supplied, 
while preserving genuine RLS XML detection and binary content detection. A Rust 
text MIME type, or a text/plain fallback for non-XML content, would avoid 
reporting Rust code as XML. Simply adding another unrelated *.rs glob in a 
custom MIME file raises a Conflicting extension pattern exception in 3.2.3.

This was found while investigating Apache RAT 0.18 skipping Rust license 
checks. RAT separately maps this XML subtype to BINARY instead of scanning it; 
a fix for that downstream classification is being prepared in RAT. This ticket 
concerns the inaccurate Rust MIME result itself.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to