diff --git a/src/main/java/com/netflix/imflibrary/MXFPropertyPopulator.java b/src/main/java/com/netflix/imflibrary/MXFPropertyPopulator.java index b2e02ed2..7806d5dc 100644 --- a/src/main/java/com/netflix/imflibrary/MXFPropertyPopulator.java +++ b/src/main/java/com/netflix/imflibrary/MXFPropertyPopulator.java @@ -253,7 +253,7 @@ else if ((field.getType() == Boolean.class) && (byteArraySize == 1)) } /** - * Getter for a string representing the byte[] + * Getter for a string representing the byte[], terminating on the first null character * * @param byteArray the byte array * @param charset the charset @@ -261,7 +261,12 @@ else if ((field.getType() == Boolean.class) && (byteArraySize == 1)) */ public static String getString(byte[] byteArray, Charset charset) { - return new String(byteArray, charset); + String s = new String(byteArray, charset); + int i = s.indexOf('\u0000'); + if (i == -1) { + return s; + } + return s.substring(0, i); } /** diff --git a/src/test/java/com/netflix/imflibrary/app/IMPAnalyzerTest.java b/src/test/java/com/netflix/imflibrary/app/IMPAnalyzerTest.java index 9425508d..54b8b85d 100644 --- a/src/test/java/com/netflix/imflibrary/app/IMPAnalyzerTest.java +++ b/src/test/java/com/netflix/imflibrary/app/IMPAnalyzerTest.java @@ -214,4 +214,13 @@ public void IMPAnalyzerAnalyzeUnknownFileError() throws IOException } + @Test + public void IMPAnalyzerAnalyzeTrackFileNullTerminatedStrings() throws IOException + { + File inputFile = TestHelper.findResourceByPath("IMFTrackFiles/AUDIO.null_terminated_strings.mxf"); + List errorList = analyzeFile(inputFile); + Assert.assertEquals(errorList.size(), 0); + + } + } diff --git a/src/test/resources/IMFTrackFiles/AUDIO.null_terminated_strings.mxf b/src/test/resources/IMFTrackFiles/AUDIO.null_terminated_strings.mxf new file mode 100644 index 00000000..9d25766c Binary files /dev/null and b/src/test/resources/IMFTrackFiles/AUDIO.null_terminated_strings.mxf differ