This is an automated email from the ASF dual-hosted git repository.
tballison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git
The following commit(s) were added to refs/heads/main by this push:
new 7c1260ebc1 TIKA-4907: Mp3Parser writes no null album and no duration
into the body (#3198)
7c1260ebc1 is described below
commit 7c1260ebc12b026907f09af1ede68b02fa162abe
Author: Tim Allison <[email protected]>
AuthorDate: Fri Sep 18 14:42:36 2026 -0400
TIKA-4907: Mp3Parser writes no null album and no duration into the body
(#3198)
---
CHANGES.txt | 4 ++++
.../java/org/apache/tika/parser/mp3/Mp3Parser.java | 5 +++--
.../org/apache/tika/parser/mp3/Mp3ParserTest.java | 19 +++++++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index ecec37d02f..75af8ccca4 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,9 @@
Release 4.1.0 - unreleased
+ * Mp3Parser no longer writes the literal "null" (a missing album) or the
+ duration into the body; an untagged MP3 has an empty body, and a TEXT
+ inference binding no longer embeds it (TIKA-4907).
+
* VLM parsers: a raw HTML block in the model's markdown (jina-ocr-v1 and
DeepSeek-OCR write tables that way) is now emitted as XHTML table
(TIKA-4906).
diff --git
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
index b55a41ae6d..1aeabe89e8 100644
---
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
+++
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
@@ -250,7 +250,9 @@ public class Mp3Parser implements Parser {
// ID3v1.1 Track addition
StringBuilder sb = new StringBuilder();
- sb.append(tag.getAlbum());
+ if (tag.getAlbum() != null) {
+ sb.append(tag.getAlbum());
+ }
if (tag.getTrackNumber() != null) {
sb.append(", track ").append(tag.getTrackNumber());
metadata.set(Audio.RAW_TRACK_NUMBER, tag.getTrackNumber());
@@ -287,7 +289,6 @@ public class Mp3Parser implements Parser {
xhtml.element("p", tag.getYear());
xhtml.element("p", tag.getGenre());
}
- xhtml.element("p", String.valueOf(audioAndTags.durationSeconds()));
for (String comment : comments) {
xhtml.element("p", comment);
}
diff --git
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
index 59808166c1..bc51896377 100644
---
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
+++
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-audiovideo-module/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
@@ -17,6 +17,7 @@
package org.apache.tika.parser.mp3;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assumptions.assumeTrue;
import java.io.ByteArrayOutputStream;
@@ -415,6 +416,24 @@ public class Mp3ParserTest extends TikaTest {
assertEquals("2.4555110931396484",
getXML("testMP3noid3.mp3").metadata.get(XMPDM.DURATION));
}
+ /** An untagged file has no body text: no "null" album and no duration
paragraph (TIKA-4907). */
+ @Test
+ public void testNoId3HasEmptyBody() throws Exception {
+ Metadata metadata = new Metadata();
+ String content = getText("testMP3noid3.mp3", metadata);
+ assertEquals("", content.trim());
+ assertEquals("2.4555110931396484", metadata.get(XMPDM.DURATION));
+ }
+
+ /** The duration lives in metadata only; a tagged file's body no longer
repeats it. */
+ @Test
+ public void testDurationNotInBody() throws Exception {
+ Metadata metadata = new Metadata();
+ String content = getText("testMP3id3v2.mp3", metadata);
+ assertContains("Test Title", content);
+ assertFalse(content.contains(metadata.get(XMPDM.DURATION)), content);
+ }
+
/**
* This test will do nothing, unless you've downloaded the
* mp3 file from TIKA-424 - the file cannot be