From 250f4559728a1ee89ffa47f03da34b804750f93e Mon Sep 17 00:00:00 2001 From: billsegall Date: Sat, 5 Aug 2017 10:54:13 +1000 Subject: [PATCH] Issue #488. Don't deference a null characterEncoding --- build.gradle | 1 + gocode/Makefile | 2 +- gocode/src/issue483/Issue483_test.go | 32 ++++++------- gocode/src/issue488/Issue488_test.go | 18 +++++++ .../generation/golang/GolangGenerator.java | 47 ++++++++++--------- sbe-tool/src/test/resources/issue488.xml | 24 ++++++++++ 6 files changed, 86 insertions(+), 38 deletions(-) create mode 100644 gocode/src/issue488/Issue488_test.go create mode 100644 sbe-tool/src/test/resources/issue488.xml diff --git a/build.gradle b/build.gradle index af5f0e1cd9..6a08fd60fa 100644 --- a/build.gradle +++ b/build.gradle @@ -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', diff --git a/gocode/Makefile b/gocode/Makefile index f06989db26..46a26e897b 100644 --- a/gocode/Makefile +++ b/gocode/Makefile @@ -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 && \ diff --git a/gocode/src/issue483/Issue483_test.go b/gocode/src/issue483/Issue483_test.go index e312d03cbf..6bdb9be20b 100644 --- a/gocode/src/issue483/Issue483_test.go +++ b/gocode/src/issue483/Issue483_test.go @@ -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() + } } diff --git a/gocode/src/issue488/Issue488_test.go b/gocode/src/issue488/Issue488_test.go new file mode 100644 index 0000000000..476ace81c6 --- /dev/null +++ b/gocode/src/issue488/Issue488_test.go @@ -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() + } +} diff --git a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/GolangGenerator.java b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/GolangGenerator.java index abe34c2532..c03aa90a14 100644 --- a/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/GolangGenerator.java +++ b/sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/golang/GolangGenerator.java @@ -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; + } } } diff --git a/sbe-tool/src/test/resources/issue488.xml b/sbe-tool/src/test/resources/issue488.xml new file mode 100644 index 0000000000..ae6295b1fb --- /dev/null +++ b/sbe-tool/src/test/resources/issue488.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + +