[
https://issues.apache.org/jira/browse/AVRO-2648?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jeffrey Mullins updated AVRO-2648:
----------------------------------
Description:
Validation of numeric default values is incorrect and results in API
inconsistencies. Below are a few examples.
Double value as int default value:
{code:java}
public void testDoubleAsIntDefaultValue() {
Schema.Field field = new Schema.Field("myField",
Schema.create(Schema.Type.INT), "doc", 1.1);
field.hasDefaultValue(); // true
field.defaultValue(); // internal DoubleNode (1.1)
field.defaultVal(); // null
GenericData.get().getDefaultValue(field); // Integer (1)
field = new Schema.Field("myField", Schema.create(Schema.Type.INT), "doc",
1.0);
field.hasDefaultValue(); // true
field.defaultValue(); // internal DoubleNode (1.0)
field.defaultVal(); // null
GenericData.get().getDefaultValue(field); // Integer (1)
}{code}
{color:#172b4d}Invalid long as int default value:{color}
{code:java}
public void testInvalidLongAsIntDefault() {
Schema.Field field = new Schema.Field("myField",
Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
field.hasDefaultValue(); // true
field.defaultValue(); // internal LongNode (2147483648)
field.defaultVal(); // Long (2147483648)
GenericData.get().getDefaultValue(field); // Integer (-2147483648)
}{code}
Additionally, since the underlying Schema.FIeld.defaultValue() is no longer
public it's not possible for users to disable default value validation and
reliably validate schemas independently.
was:
Validation of numeric default values is incorrect and results in API
inconsistencies. Below are a few examples.
Double value as int default value:
{code:java}
public void testDoubleAsIntDefaultValue() {
Schema.Field field = new Schema.Field("myField",
Schema.create(Schema.Type.INT), "doc", 1.1);
field.hasDefaultValue(); // true
field.defaultValue(); // internal DoubleNode (1.1)
field.defaultVal(); // null
GenericData.get().getDefaultValue(field); // Integer (1)
field = new Schema.Field("myField", Schema.create(Schema.Type.INT), "doc",
1.0);
field.hasDefaultValue(); // true
field.defaultValue(); // internal DoubleNode (1.0)
field.defaultVal(); // null
GenericData.get().getDefaultValue(field); // Integer (1)
}{code}
{color:#172b4d}Invalid long as int default value:{color}
{code:java}
public void testInvalidLongAsIntDefault() {
Schema.Field field = new Schema.Field("myField",
Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
field.hasDefaultValue(); // true
field.defaultValue(); // internal LongNode (2147483648)
field.defaultVal(); // Lone (2147483648)
GenericData.get().getDefaultValue(field); // Integer (-2147483648)
}{code}
Additionally, since the underlying Schema.FIeld.defaultValue() is no longer
public it's not possible for users to disable default value validation and
reliably validate schemas independently.
> Incorrect validation of numeric default values
> ----------------------------------------------
>
> Key: AVRO-2648
> URL: https://issues.apache.org/jira/browse/AVRO-2648
> Project: Apache Avro
> Issue Type: Bug
> Components: java
> Reporter: Jeffrey Mullins
> Assignee: Jeffrey Mullins
> Priority: Major
>
> Validation of numeric default values is incorrect and results in API
> inconsistencies. Below are a few examples.
> Double value as int default value:
> {code:java}
> public void testDoubleAsIntDefaultValue() {
> Schema.Field field = new Schema.Field("myField",
> Schema.create(Schema.Type.INT), "doc", 1.1);
> field.hasDefaultValue(); // true
> field.defaultValue(); // internal DoubleNode (1.1)
> field.defaultVal(); // null
> GenericData.get().getDefaultValue(field); // Integer (1)
>
> field = new Schema.Field("myField", Schema.create(Schema.Type.INT),
> "doc", 1.0);
> field.hasDefaultValue(); // true
> field.defaultValue(); // internal DoubleNode (1.0)
> field.defaultVal(); // null
> GenericData.get().getDefaultValue(field); // Integer (1)
> }{code}
>
> {color:#172b4d}Invalid long as int default value:{color}
> {code:java}
> public void testInvalidLongAsIntDefault() {
> Schema.Field field = new Schema.Field("myField",
> Schema.create(Schema.Type.INT), "doc", Integer.MAX_VALUE + 1L);
> field.hasDefaultValue(); // true
> field.defaultValue(); // internal LongNode (2147483648)
> field.defaultVal(); // Long (2147483648)
> GenericData.get().getDefaultValue(field); // Integer (-2147483648)
> }{code}
> Additionally, since the underlying Schema.FIeld.defaultValue() is no longer
> public it's not possible for users to disable default value validation and
> reliably validate schemas independently.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)