diff --git a/docs/changelog/112703.yaml b/docs/changelog/112703.yaml new file mode 100644 index 000000000000..a428e8c4e233 --- /dev/null +++ b/docs/changelog/112703.yaml @@ -0,0 +1,5 @@ +pr: 112703 +summary: JSON parse failures should be 4xx codes +area: Infra/Core +type: bug +issues: [] diff --git a/libs/x-content/impl/src/main/java/org/elasticsearch/xcontent/provider/json/JsonXContentParser.java b/libs/x-content/impl/src/main/java/org/elasticsearch/xcontent/provider/json/JsonXContentParser.java index c59f003d9cb0..63191084ca83 100644 --- a/libs/x-content/impl/src/main/java/org/elasticsearch/xcontent/provider/json/JsonXContentParser.java +++ b/libs/x-content/impl/src/main/java/org/elasticsearch/xcontent/provider/json/JsonXContentParser.java @@ -111,7 +111,7 @@ public class JsonXContentParser extends AbstractXContentParser { } private void throwOnNoText() { - throw new IllegalStateException("Can't get text on a " + currentToken() + " at " + getTokenLocation()); + throw new IllegalArgumentException("Expected text at " + getTokenLocation() + " but found " + currentToken()); } @Override diff --git a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java index 062e7551a53c..638af1a10532 100644 --- a/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java +++ b/server/src/main/java/org/elasticsearch/index/mapper/IpFieldMapper.java @@ -42,7 +42,6 @@ import org.elasticsearch.search.DocValueFormat; import org.elasticsearch.search.aggregations.support.CoreValuesSourceType; import org.elasticsearch.search.lookup.FieldValues; import org.elasticsearch.search.lookup.SearchLookup; -import org.elasticsearch.xcontent.XContentParser; import java.io.IOException; import java.net.InetAddress; @@ -545,8 +544,9 @@ public class IpFieldMapper extends FieldMapper { @Override protected void parseCreateField(DocumentParserContext context) throws IOException { InetAddress address; + String value = context.parser().textOrNull(); try { - address = value(context.parser(), nullValue); + address = value == null ? nullValue : InetAddresses.forString(value); } catch (IllegalArgumentException e) { if (ignoreMalformed) { context.addIgnoredField(fieldType().name()); @@ -564,14 +564,6 @@ public class IpFieldMapper extends FieldMapper { } } - private static InetAddress value(XContentParser parser, InetAddress nullValue) throws IOException { - String value = parser.textOrNull(); - if (value == null) { - return nullValue; - } - return InetAddresses.forString(value); - } - private void indexValue(DocumentParserContext context, InetAddress address) { if (dimension) { context.getDimensions().addIp(fieldType().name(), address).validate(context.indexSettings()); diff --git a/server/src/test/java/org/elasticsearch/common/ReferenceDocsTests.java b/server/src/test/java/org/elasticsearch/common/ReferenceDocsTests.java index 0fabf7801730..49208f234170 100644 --- a/server/src/test/java/org/elasticsearch/common/ReferenceDocsTests.java +++ b/server/src/test/java/org/elasticsearch/common/ReferenceDocsTests.java @@ -66,7 +66,7 @@ public class ReferenceDocsTests extends ESTestCase { builder.startObject("UNEXPECTED").endObject().endObject(); try (var stream = BytesReference.bytes(builder).streamInput()) { - expectThrows(IllegalStateException.class, () -> ReferenceDocs.readLinksBySymbol(stream)); + expectThrows(IllegalArgumentException.class, () -> ReferenceDocs.readLinksBySymbol(stream)); } } diff --git a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java index 278d4ae505bd..48e8f0ef1167 100644 --- a/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java +++ b/server/src/test/java/org/elasticsearch/index/query/MatchQueryBuilderTests.java @@ -373,7 +373,7 @@ public class MatchQueryBuilderTests extends AbstractQueryTestCase parseQuery(json2)); + expectThrows(IllegalArgumentException.class, () -> parseQuery(json2)); } public void testExceptionUsingAnalyzerOnNumericField() {