Repository navigation
Commit 55899e3
authored
Fix zero attribute value length for malformed UTF-8 (#9054)
Fixes #9053.
Fix zero attribute value length truncation for a single malformed UTF-8
byte in the shared SDK normalizer and the independent auto-instrumented
trace path.
## Benchmark
`benchstat` on AMD EPYC 7571 with Go 1.27, `-cpu=1 -benchtime=200ms
-count=8`, comparing upstream `main` with this branch (ns/op; no
allocation changes):
```text
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/sdk/internal/attrnorm
cpu: AMD EPYC 7571
│ /tmp/otel-9053-sdk-final-before.bench │ /tmp/otel-9053-sdk-final-after.bench │
│ sec/op │ sec/op vs base │
Truncate/Zero 6.784n ± 0% 7.207n ± 0% +6.22% (p=0.000 n=8)
Truncate/ASCII 13.49n ± 0% 13.86n ± 0% +2.78% (p=0.000 n=8)
Truncate/ValidUTF-8 25.53n ± 1% 27.14n ± 1% +6.31% (p=0.000 n=8)
geomean 13.27n 13.94n +5.09%
│ /tmp/otel-9053-sdk-final-before.bench │ /tmp/otel-9053-sdk-final-after.bench │
│ B/op │ B/op vs base │
Truncate/Zero 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ASCII 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ValidUTF-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ /tmp/otel-9053-sdk-final-before.bench │ /tmp/otel-9053-sdk-final-after.bench │
│ allocs/op │ allocs/op vs base │
Truncate/Zero 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ASCII 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ValidUTF-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
```
```text
goos: linux
goarch: amd64
pkg: go.opentelemetry.io/otel/trace
cpu: AMD EPYC 7571
│ /tmp/otel-9053-trace-controlled-before.bench │ /tmp/otel-9053-trace-controlled-after.bench │
│ sec/op │ sec/op vs base │
Truncate/Zero 7.987n ± 0% 6.802n ± 1% -14.85% (p=0.000 n=8)
Truncate/ASCII 16.32n ± 0% 15.17n ± 0% -7.05% (p=0.000 n=8)
Truncate/ValidUTF-8 30.71n ± 0% 29.54n ± 1% -3.83% (p=0.000 n=8)
geomean 15.88n 14.50n -8.69%
│ /tmp/otel-9053-trace-controlled-before.bench │ /tmp/otel-9053-trace-controlled-after.bench │
│ B/op │ B/op vs base │
Truncate/Zero 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ASCII 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ValidUTF-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
│ /tmp/otel-9053-trace-controlled-before.bench │ /tmp/otel-9053-trace-controlled-after.bench │
│ allocs/op │ allocs/op vs base │
Truncate/Zero 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ASCII 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
Truncate/ValidUTF-8 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=8) ¹
geomean ² +0.00% ²
¹ all samples are equal
² summaries must be >0 to compute geomean
```1 parent 75b1fe3 commit 55899e3
9 files changed
Lines changed: 40 additions & 0 deletions
File tree
- sdk
- internal/attrnorm
- log/internal/attrnorm
- trace
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
40 | 41 | | |
41 | 42 | | |
42 | 43 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
359 | 359 | | |
360 | 360 | | |
361 | 361 | | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
362 | 366 | | |
363 | 367 | | |
364 | 368 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
787 | 792 | | |
788 | 793 | | |
789 | 794 | | |
| 795 | + | |
| 796 | + | |
790 | 797 | | |
791 | 798 | | |
792 | 799 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
359 | 359 | | |
360 | 360 | | |
361 | 361 | | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
362 | 366 | | |
363 | 367 | | |
364 | 368 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
787 | 792 | | |
788 | 793 | | |
789 | 794 | | |
| 795 | + | |
| 796 | + | |
790 | 797 | | |
791 | 798 | | |
792 | 799 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
359 | 359 | | |
360 | 360 | | |
361 | 361 | | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
362 | 366 | | |
363 | 367 | | |
364 | 368 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
50 | 55 | | |
51 | 56 | | |
52 | 57 | | |
| |||
787 | 792 | | |
788 | 793 | | |
789 | 794 | | |
| 795 | + | |
| 796 | + | |
790 | 797 | | |
791 | 798 | | |
792 | 799 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
407 | 407 | | |
408 | 408 | | |
409 | 409 | | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
410 | 414 | | |
411 | 415 | | |
412 | 416 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1097 | 1097 | | |
1098 | 1098 | | |
1099 | 1099 | | |
| 1100 | + | |
| 1101 | + | |
1100 | 1102 | | |
1101 | 1103 | | |
1102 | 1104 | | |
| |||
0 commit comments