From d89c0574a6ae9c0f176612e5a2d024fd30988163 Mon Sep 17 00:00:00 2001 From: Romain Serra Date: Mon, 26 Sep 2022 12:26:20 +0000 Subject: [PATCH 1/4] Fixed issue #963 --- .../org/orekit/files/ccsds/utils/lexical/ParseToken.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/orekit/files/ccsds/utils/lexical/ParseToken.java b/src/main/java/org/orekit/files/ccsds/utils/lexical/ParseToken.java index 75cafd7b1..30eedcc06 100644 --- a/src/main/java/org/orekit/files/ccsds/utils/lexical/ParseToken.java +++ b/src/main/java/org/orekit/files/ccsds/utils/lexical/ParseToken.java @@ -66,6 +66,9 @@ public class ParseToken { /** Pattern for splitting comma-separated lists. */ private static final Pattern SPLIT_AT_COMMAS = Pattern.compile("\\p{Space}*,\\p{Space}*"); + /** Pattern for splitting comma-separated lists with no space in between. */ + private static final Pattern SPLIT_AT_COMMAS_NO_SPACE = Pattern.compile(","); + /** Pattern for true boolean value. */ private static final Pattern BOOLEAN_TRUE = Pattern.compile("(?:yes)|(?:true)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); @@ -392,14 +395,14 @@ public class ParseToken { return true; } - /** Process the content as an array of integers. + /** Process the content as an array of integers. No spaces between commas are allowed. * @param consumer consumer of the array * @return always returns {@code true} */ public boolean processAsIntegerArray(final IntegerArrayConsumer consumer) { try { if (type == TokenType.ENTRY) { - final String[] fields = SPLIT_AT_COMMAS.split(getRawContent()); + final String[] fields = SPLIT_AT_COMMAS_NO_SPACE.split(getRawContent()); final int[] integers = new int[fields.length]; for (int i = 0; i < fields.length; ++i) { integers[i] = Integer.parseInt(fields[i]); -- GitLab From 43de5415fb8dcec5b48830d172a16876c89ef25e Mon Sep 17 00:00:00 2001 From: Romain Serra Date: Tue, 27 Sep 2022 07:27:38 +0000 Subject: [PATCH 2/4] Upload New Test File --- .../resources/ccsds/tdm/kvn/TDM-issue963.txt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/test/resources/ccsds/tdm/kvn/TDM-issue963.txt diff --git a/src/test/resources/ccsds/tdm/kvn/TDM-issue963.txt b/src/test/resources/ccsds/tdm/kvn/TDM-issue963.txt new file mode 100644 index 000000000..834451ebb --- /dev/null +++ b/src/test/resources/ccsds/tdm/kvn/TDM-issue963.txt @@ -0,0 +1,29 @@ +CCSDS_TDM_VERS = 1.0 +COMMENT TDM example created by yyyyy-nnnA Nav Team (NASA/JPL) +COMMENT StarTrek 1-way data, Ka band down +CREATION_DATE = 2005-160T20:15:00 +ORIGINATOR = NASA/JPL +META_START +TIME_SYSTEM = UTC +START_TIME = 2005-159T17:41:00 +STOP_TIME = 2005-159T17:41:40 +PARTICIPANT_1 = DSS-25 +PARTICIPANT_2 = yyyy-nnnA +MODE = SEQUENTIAL +PATH = 2, 1 +INTEGRATION_INTERVAL = 1.0 +INTEGRATION_REF = MIDDLE +FREQ_OFFSET = 32021035200.0 +TRANSMIT_DELAY_1 = 0.000077 +RECEIVE_DELAY_1 = 0.000077 +DATA_QUALITY = RAW +META_STOP +DATA_START +TRANSMIT_FREQ_2 = 2005-159T17:41:00 32023442781.733 +RECEIVE_FREQ_1 = 2005-159T17:41:00 -409.2735 +RECEIVE_FREQ_1 = 2005-159T17:41:01 -371.1568 +RECEIVE_FREQ_1 = 2005-159T17:41:02 -333.0551 this-should-not-be-here +RECEIVE_FREQ_1 = 2005-159T17:41:03 -294.9673 +RECEIVE_FREQ_1 = 2005-159T17:41:04 -256.9054 +RECEIVE_FREQ_1 = 2005-159T17:41:05 -218.7951 +DATA_STOP \ No newline at end of file -- GitLab From 0c88941f0518c30b1e5f7cddd5395ef7c7ca6aa4 Mon Sep 17 00:00:00 2001 From: Romain Serra Date: Tue, 27 Sep 2022 07:29:08 +0000 Subject: [PATCH 3/4] Update TDM testing with issue 963 fix --- .../orekit/files/ccsds/ndm/tdm/TdmParserTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/org/orekit/files/ccsds/ndm/tdm/TdmParserTest.java b/src/test/java/org/orekit/files/ccsds/ndm/tdm/TdmParserTest.java index f14339617..2d82290a8 100644 --- a/src/test/java/org/orekit/files/ccsds/ndm/tdm/TdmParserTest.java +++ b/src/test/java/org/orekit/files/ccsds/ndm/tdm/TdmParserTest.java @@ -243,6 +243,21 @@ public class TdmParserTest { validateTDMExample15(file); } + @Test + public void testIssue963() { + + // Check that a TDM with spaces in between participants in PATH is rejected + final String name = "/ccsds/tdm/kvn/TDM-issue963.txt"; + final DataSource source = new DataSource(name, () -> TdmParserTest.class.getResourceAsStream(name)); + try { + // Number format exception in metadata part + new ParserBuilder().buildTdmParser().parseMessage(source); + Assertions.fail("An exception should have been thrown"); + } catch (OrekitException oe) { + Assertions.assertEquals(OrekitMessages.UNABLE_TO_PARSE_ELEMENT_IN_FILE, oe.getSpecifier()); + } + } + @Test public void testParseTdmXmlExampleAllKeywordsSequential() { -- GitLab From 5e28779b7f270626ba5721f971d34746d3bb91ac Mon Sep 17 00:00:00 2001 From: Maxime Journot Date: Wed, 28 Sep 2022 17:46:25 +0200 Subject: [PATCH 4/4] Updated changes.xml. --- src/changes/changes.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 5c973b7bd..d16c09928 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -21,6 +21,9 @@ + + Fixed rejection of irregular TDM PATH field. + Added ephemeris based estimation. -- GitLab