Skip to content

Issue #488. Don't deference a null characterEncoding #491

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
Aug 5, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -524,6 +524,7 @@ task(generateGolangCodecsWithXSD, type: JavaExec) {
'sbe-tool/src/test/resources/issue435.xml',
'sbe-tool/src/test/resources/issue472.xml',
'sbe-tool/src/test/resources/issue483.xml',
'sbe-tool/src/test/resources/issue488.xml',
'sbe-tool/src/test/resources/since-deprecated-test-schema.xml',
'sbe-tool/src/test/resources/example-bigendian-test-schema.xml',
'gocode/resources/example-composite.xml',
Expand Down
2 changes: 1 addition & 1 deletion gocode/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ test: $(DEP)
go install \
;done))
(export GOPATH=$(GOPATH) && \
(for t in baseline-bigendian mktdata group_with_data group_with_data_extension composite_elements composite since-deprecated simple issue435 issue472; do \
(for t in baseline-bigendian mktdata group_with_data group_with_data_extension composite_elements composite since-deprecated simple issue435 issue472 issue483 issue488; do \
cd $(GOPATH)/src/$$t && \
go build && \
go fmt && \
Expand Down
32 changes: 16 additions & 16 deletions gocode/src/issue483/Issue483_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,23 @@ import (
func TestPresence(t *testing.T) {
issue483 := new(Issue483)

if issue483.UnsetMetaAttribute(4) != "required" {
t.Log("Unset attribute's presence should be 'required'")
t.Fail()
}
if issue483.UnsetMetaAttribute(4) != "required" {
t.Log("Unset attribute's presence should be 'required'")
t.Fail()
}

if issue483.RequiredMetaAttribute(4) != "required" {
t.Log("Required attribute's presence should be 'required'")
t.Fail()
}
if issue483.RequiredMetaAttribute(4) != "required" {
t.Log("Required attribute's presence should be 'required'")
t.Fail()
}

if issue483.ConstantMetaAttribute(4) != "constant" {
t.Log("Constant attribute's presence should be 'constant'")
t.Fail()
}
if issue483.ConstantMetaAttribute(4) != "constant" {
t.Log("Constant attribute's presence should be 'constant'")
t.Fail()
}

if issue483.OptionalMetaAttribute(4) != "optional" {
t.Log("Optional attribute's presence should be 'optional'")
t.Fail()
}
if issue483.OptionalMetaAttribute(4) != "optional" {
t.Log("Optional attribute's presence should be 'optional'")
t.Fail()
}
}
18 changes: 18 additions & 0 deletions gocode/src/issue488/Issue488_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package issue488

import (
"testing"
)

func TestPresence(t *testing.T) {
issue488 := new(Issue488)
v := new(VarDataEncoding)
issue488.VarData = make([]uint8, 3)
issue488.VarData[0] = v.VarDataMinValue()
issue488.VarData[1] = 42
issue488.VarData[2] = v.VarDataMaxValue()
if err := issue488.RangeCheck(0, 0); err != nil {
t.Log("RangeCheck failed", err)
t.Fail()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -210,29 +210,34 @@ private void generateCharacterEncodingRangeCheck(
final String varName,
final Token token)
{
switch (token.encoding().characterEncoding())
final String characterEncoding = token.encoding().characterEncoding();

if (null != characterEncoding)
{
case "ASCII":
this.imports.add("fmt");
sb.append(String.format(
"\tfor idx, ch := range %1$s {\n" +
"\t\tif ch > 127 {\n" +
"\t\t\treturn fmt.Errorf(\"%1$s[%%d]=%%d" +
" failed ASCII validation\", idx, ch)\n" +
"\t\t}\n" +
"\t}\n",
varName));
break;
switch (token.encoding().characterEncoding())
{
case "ASCII":
this.imports.add("fmt");
sb.append(String.format(
"\tfor idx, ch := range %1$s {\n" +
"\t\tif ch > 127 {\n" +
"\t\t\treturn fmt.Errorf(\"%1$s[%%d]=%%d" +
" failed ASCII validation\", idx, ch)\n" +
"\t\t}\n" +
"\t}\n",
varName));
break;

case "UTF-8":
this.imports.add("errors");
this.imports.add("unicode/utf8");
sb.append(String.format(
"\tif !utf8.Valid(%1$s[:]) {\n" +
"\t\treturn errors.New(\"%1$s failed UTF-8 validation\")\n" +
"\t}\n",
varName));
break;
case "UTF-8":
this.imports.add("errors");
this.imports.add("unicode/utf8");
sb.append(String.format(
"\tif !utf8.Valid(%1$s[:]) {\n" +
"\t\treturn errors.New(\"%1$s failed UTF-8 validation\")\n" +
"\t}\n",
varName));
break;
}
}
}

Expand Down
24 changes: 24 additions & 0 deletions sbe-tool/src/test/resources/issue488.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
package="issue488"
id="488"
version="0"
semanticVersion="1.0"
description="issue 488 test case"
byteOrder="bigEndian">
<types>
<composite name="messageHeader" description="Message identifiers and length of message root">
<type name="blockLength" primitiveType="uint16"/>
<type name="templateId" primitiveType="uint16"/>
<type name="schemaId" primitiveType="uint16"/>
<type name="version" primitiveType="uint16"/>
</composite>
<composite name="varDataEncoding">
<type name="length" primitiveType="uint32" maxValue="1073741824"/>
<type name="varData" primitiveType="uint8" length="0"/>
</composite>
</types>
<sbe:message name="issue488" id="1" description="issue 483 test">
<data name="varData" type="varDataEncoding" id="2"/>
</sbe:message>
</sbe:messageSchema>