CARVIEW |
Select Language
HTTP/2 200
date: Sun, 20 Jul 2025 13:14:20 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
x-repository-download: git clone https://github.com/aeron-io/simple-binary-encoding.git
etag: W/"8d284495703079246de1cfac77ebd94f"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=9cPbhjC7HzjdaIDH7gzgYFnMyagn%2FeGLSh9Ivxnekk3NtJ21Km%2FQp6F%2B6%2FlrgA63kd95aWz8%2Ffls3TCdxHORcXe%2FPBsHGQZ60ZMsfdaEMVlRqNA%2BdnuQ6sf7eEb6xVahkzdMj85M%2BP%2B4zt%2BUJBkjN9x60LsSefb%2FSN927RRXs7UOrwHSSn%2F%2BJN0faN%2FOQLGn1jBH3F%2FngD6z7NMuxzrjGrTGTy%2FoUy3y335Ol%2F4MXSMhMN616Rm%2FxvCGfXqj2KUrDJbTaAtNOQBTkZ7oWJp3yw%3D%3D--%2Fj%2Biusvaphe6usBe--OpybP7d%2FMI1VFR4hvFTUrQ%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1530278544.1753017259; Path=/; Domain=github.com; Expires=Mon, 20 Jul 2026 13:14:19 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Mon, 20 Jul 2026 13:14:19 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: AA4C:3B2301:55A618:7024A2:687CEBAB
[Java/C++/C#] Fix a bug in overzealous DTO validation (#1073) · aeron-io/simple-binary-encoding@092c1af · GitHub
Copy file name to clipboard
Copy file name to clipboardExpand all lines: sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppDtoGenerator.java
Copy file name to clipboardExpand all lines: sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpDtoGenerator.java
Skip to content
Navigation Menu
{{ message }}
-
Notifications
You must be signed in to change notification settings - Fork 542
Commit 092c1af
authored
[Java/C++/C#] Fix a bug in overzealous DTO validation (#1073)
* [Java] Cover null values in PBTs.
We had a recent bug report where the generated Java DTOs were not
correctly handling null values for optional fields.
It turns out the property-based tests were not encoding these values.
Now, they do, and they fail with messages like this one:
```
java.lang.IllegalArgumentException: member1: value is out of allowed range: 255
at uk.co.real_logic.sbe.properties.TestMessageDto.validateMember1(TestMessageDto.java:33)
at uk.co.real_logic.sbe.properties.TestMessageDto.member1(TestMessageDto.java:55)
at uk.co.real_logic.sbe.properties.TestMessageDto.decodeWith(TestMessageDto.java:112)
at uk.co.real_logic.sbe.properties.TestMessageDto.decodeFrom(TestMessageDto.java:135)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at uk.co.real_logic.sbe.properties.DtosPropertyTest.javaDtoEncodeShouldBeTheInverseOfDtoDecode(DtosPropertyTest.java:114)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
```
* [Java] Support arbitrary char arrays in PBTs without data after null.
I spotted a failure in the DTO round-trip test locally where the DTO's
(and flyweight codec's) String-typed accessor would return `""` if the
first character in an array was the `null` character. Therefore, it
would not round-trip the "hidden bytes" after the `null`.
In this commit, I've added a generation mode that disables the
generation of strings with this format. Given the representation of
char[N] in DTOs it would not be sensible to support round-tripping these
"hidden bytes".
* [Java,C++,C#] Improve DTO value validation.
Previously, in Java, the generated validation methods would not permit
the null value, even for fields with optional presence. Now, we do allow
these correctly.
In this commit, I've also attempted to clean up, centralise, and test
the logic that decides when validation for a particular side of a range
needs to be included. We omit the validation when the native type cannot
represent values outside of the range.
There are still some gaps around validation, e.g., we do not validate
array values.
* [Java] Fix JSON escaping of string characters, delimeters, etc.
Previously, there were several problems:
- (delimeters) single `char` values were output with single quotes, but this is not
valid JSON.
- (escaping) escaping was not implemented as per the specification in
Section 7 of RFC 8259. For example, special-cased control codes, e.g.,
`\b` were encoded as `\\` followed by `\b` rather than `\\` followed by
`b`. Also, the non-special-cased control characters were not encoded
using JSON's mechanism for doing so, e.g., `\u0020`.
- (numbers) Section 6 of the specification says "Numeric values that
cannot be represented in the grammar below (such as Infinity and NaN)
are not permitted." However, these were encoded as expressions of
numbers with multiple terms, e.g., `-1/0` for positive infinity. While
these are quite logical encodings of such "numbers", it is not valid
JSON. Therefore, I have kept the expressions, but enclosed them within
quotes.
Also, in this commit:
- Replaced custom compilation logic with Agrona's CompilerUtil. Note
that `CompilerUtil#compileOnDisk` is broken. I attempted to use it to
see if I could see classes in IntelliJ rather than just stack frames,
but it fails with an NPE.1 parent 13f9636 commit 092c1afCopy full SHA for 092c1af
File tree
Expand file treeCollapse file tree
13 files changed
+959
-299
lines changedFilter options
- sbe-tool/src
- main/java/uk/co/real_logic/sbe
- generation
- common
- cpp
- csharp
- java
- json
- otf
- propertyTest/java/uk/co/real_logic/sbe/properties
- arbitraries
- schema
- utils
- test/java/uk/co/real_logic/sbe/generation/common
Expand file treeCollapse file tree
13 files changed
+959
-299
lines changedsbe-tool/src/main/java/uk/co/real_logic/sbe/generation/common/DtoValidationUtil.java
Copy file name to clipboard+224Lines changed: 224 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + |
sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppDtoGenerator.java
Copy file name to clipboardExpand all lines: sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/cpp/CppDtoGenerator.java+8-2Lines changed: 8 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
35 | 35 |
| |
36 | 36 |
| |
37 | 37 |
| |
| 38 | + | |
| 39 | + | |
| 40 | + | |
38 | 41 |
| |
39 | 42 |
| |
40 | 43 |
| |
| |||
1591 | 1594 |
| |
1592 | 1595 |
| |
1593 | 1596 |
| |
1594 |
| - | |
1595 |
| - | |
| 1597 | + | |
| 1598 | + | |
| 1599 | + | |
| 1600 | + | |
| 1601 | + | |
1596 | 1602 |
| |
1597 | 1603 |
| |
1598 | 1604 |
| |
|
sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpDtoGenerator.java
Copy file name to clipboardExpand all lines: sbe-tool/src/main/java/uk/co/real_logic/sbe/generation/csharp/CSharpDtoGenerator.java+9-2Lines changed: 9 additions & 2 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
35 | 35 |
| |
36 | 36 |
| |
37 | 37 |
| |
| 38 | + | |
| 39 | + | |
| 40 | + | |
38 | 41 |
| |
39 | 42 |
| |
40 | 43 |
| |
| |||
1285 | 1288 |
| |
1286 | 1289 |
| |
1287 | 1290 |
| |
1288 |
| - | |
| 1291 | + | |
| 1292 | + | |
| 1293 | + | |
1289 | 1294 |
| |
1290 | 1295 |
| |
1291 | 1296 |
| |
| |||
1299 | 1304 |
| |
1300 | 1305 |
| |
1301 | 1306 |
| |
1302 |
| - | |
| 1307 | + | |
| 1308 | + | |
| 1309 | + | |
1303 | 1310 |
| |
1304 | 1311 |
| |
1305 | 1312 |
| |
|
You can’t perform that action at this time.
0 commit comments