[ 
https://issues.apache.org/jira/browse/AVRO-3560?focusedWorklogId=786981&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-786981
 ]

ASF GitHub Bot logged work on AVRO-3560:
----------------------------------------

                Author: ASF GitHub Bot
            Created on: 01/Jul/22 08:11
            Start Date: 01/Jul/22 08:11
    Worklog Time Spent: 10m 
      Work Description: KalleOlaviNiemitalo commented on code in PR #1748:
URL: https://github.com/apache/avro/pull/1748#discussion_r911725171


##########
lang/java/avro/src/main/java/org/apache/avro/Schema.java:
##########
@@ -1454,19 +1456,37 @@ public Schema parse(String s, String... more) {
      */
     public Schema parse(String s) {
       try {
-        return parse(FACTORY.createParser(s));
+        return parse(FACTORY.createParser(s), false);
       } catch (IOException e) {
         throw new SchemaParseException(e);
       }
     }
 
-    private Schema parse(JsonParser parser) throws IOException {
+    private Schema parse(JsonParser parser, boolean allowDanglingContent) 
throws IOException {
       boolean saved = validateNames.get();
       boolean savedValidateDefaults = VALIDATE_DEFAULTS.get();
       try {
         validateNames.set(validate);
         VALIDATE_DEFAULTS.set(validateDefaults);
-        return Schema.parse(MAPPER.readTree(parser), names);
+        JsonNode jsonNode = MAPPER.readTree(parser);
+        Schema schema = Schema.parse(jsonNode, names);
+        if (!allowDanglingContent) {
+          StringWriter danglingWriter = new StringWriter();
+          parser.releaseBuffered(danglingWriter);
+          String dangling = danglingWriter.toString().trim();
+          if (dangling.isEmpty()) {
+            // releaseBuffered(Writer) above works in case the source was 
character-based
+            // (ex. a String). releaseBuffered(OutputStream) covers the case 
that the
+            // source was byte-based (ex. a File)
+            ByteArrayOutputStream danglingOutputStream = new 
ByteArrayOutputStream();
+            parser.releaseBuffered(danglingOutputStream);
+            dangling = new String(danglingOutputStream.toByteArray(), 
StandardCharsets.UTF_8);

Review Comment:
   Should you trim this too?





Issue Time Tracking
-------------------

    Worklog Id:     (was: 786981)
    Time Spent: 1h 20m  (was: 1h 10m)

> avro ignores input after end of avsc json
> -----------------------------------------
>
>                 Key: AVRO-3560
>                 URL: https://issues.apache.org/jira/browse/AVRO-3560
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.11.0
>            Reporter: Radai Rosenblatt
>            Assignee: Radai Rosenblatt
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 20m
>  Remaining Estimate: 0h
>
> try the following unit test:
> {code}
> @Test
> public void littleBobbySchemas() throws Exception {
>     Schema.Parser parser = new Schema.Parser();
>     parser.setValidate(true);
>     parser.setValidateDefaults(true);
>     Schema schema = parser.parse("{\"type\": \"string\"}; DROP TABLE 
> STUDENTS");
>     Assert.assertNotNull(schema);
> }
> {code}



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

Reply via email to