[prev in list] [next in list] [prev in thread] [next in thread] 

List:       avro-dev
Subject:    [jira] [Resolved] (AVRO-1667) Parser symbol tree flattening is broken for recursive schemas
From:       "Ryan Blue (JIRA)" <jira () apache ! org>
Date:       2016-03-15 15:50:34
Message-ID: JIRA.12827396.1430854866000.23689.1458057034390 () Atlassian ! JIRA
[Download RAW message or body]


     [ https://issues.apache.org/jira/browse/AVRO-1667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel \
]

Ryan Blue resolved AVRO-1667.
-----------------------------
       Resolution: Fixed
         Assignee: Zoltan Farkas
    Fix Version/s: 1.8.1

I committed the fix with the update. Thanks for working on this, [~zolyfarkas]! I \
didn't add the test since it doesn't catch the broken case. I'd like to get one that \
does, but there's no need to make this fix dependent on it.

> Parser symbol tree flattening is broken for recursive schemas
> -------------------------------------------------------------
> 
> Key: AVRO-1667
> URL: https://issues.apache.org/jira/browse/AVRO-1667
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.7.7
> Reporter: Zoltan Farkas
> Assignee: Zoltan Farkas
> Fix For: 1.8.1
> 
> Attachments: AVRO-1667.2.patch, avro-1667.patch
> 
> 
> Here is a unit test to reproduce:
> {noformat}
> package org.apache.avro.io.parsing;
> import java.io.IOException;
> import java.util.HashMap;
> import java.util.HashSet;
> import java.util.Set;
> import junit.framework.Assert;
> import org.apache.avro.Schema;
> import org.junit.Test;
> public class SymbolTest {
> private static final String SCHEMA = \
> "{\"type\":\"record\",\"name\":\"SampleNode\"," + \
> "\"namespace\":\"org.spf4j.ssdump2.avro\",\n" + " \"fields\":[\n" +
> "    {\"name\":\"count\",\"type\":\"int\",\"default\":0},\n" +
> "    {\"name\":\"subNodes\",\"type\":\n" +
> "       {\"type\":\"array\",\"items\":{\n" +
> "           \"type\":\"record\",\"name\":\"SamplePair\",\n" +
> "           \"fields\":[\n" +
> "              {\"name\":\"method\",\"type\":\n" +
> "                  {\"type\":\"record\",\"name\":\"Method\",\n" +
> "                  \"fields\":[\n" +
> "                     \
> {\"name\":\"declaringClass\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}},\n" \
> + "                     \
> {\"name\":\"methodName\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\"}}\n" \
> + "                  ]}},\n" +
> "              {\"name\":\"node\",\"type\":\"SampleNode\"}]}}}]}";
> @Test
> public void testSomeMethod() throws IOException {
> Schema schema = new Schema.Parser().parse(SCHEMA);
> Symbol root = Symbol.root(new ResolvingGrammarGenerator()
> .generate(schema, schema, new HashMap<ValidatingGrammarGenerator.LitS, Symbol>()));
> validateNonNull(root, new HashSet<Symbol>());
> }
> private static void validateNonNull(final Symbol symb, Set<Symbol> seen) {
> if (seen.contains(symb)) {
> return;
> } else {
> seen.add(symb);
> }
> if (symb.production != null) {
> for (Symbol s : symb.production) {
> if (s == null) {
> Assert.fail("invalid parsing tree should not contain nulls");
> }
> if (s.kind != Symbol.Kind.ROOT) {
> validateNonNull(s, seen);;
> }
> }
> }
> }
> }
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic