pprof
pprof copied to clipboard
quotes in CPU profile tags not escaped properly
What version of pprof are you using?
00490a63f31712a6991b73391dd3decdada278d0 (i.e. main as of today), but the problem exists in all prior versions. I first stumbled upon it in Go 1.19.
What operating system and processor architecture are you using?
Irrelevant
What did you do?
Run pprof -dot
on the provided file (this is a CPU profile taken of a CockroachDB 23.1 node, but these details don't matter). Note how the resulting .dot
file is invalid since the "
occurring in a label was not properly escaped:
N36_0 [label = "range_str:12419/2:/Table/136/1/"{NHCH-…-PWN-a"}" id="N36_0" fontsize=8 shape=box3d tooltip="0.01s"]
What did you expect to see?
The "
in the label should have been escaped, resulting in a valid .dot
file.
What did you see instead?
An invalid dot
file, which in particular implies that the graph view in pprof isn't working. The line above should have been
N36_0 [label = "range_str:12419/2:/Table/136/1/\"{NHCH-…-PWN-a\"}" id="N36_0" fontsize=8 shape=box3d tooltip="0.01s"]
which would work.
I gave it a half-hearted attempt at fixing, but it seemed like there might be more than one place where the escaping isn't happening properly and it wasn't super clear to me where we'd need to throw in an escapeForDot
^1 on top of here:
https://github.com/google/pprof/blob/a41b82acbcb1f6a6d0998b0fddeb1f1adb7d8fc1/internal/graph/dotgraph.go#L251
Also, it seems useful to add testing for these sorts of things.
the err i met is:
Warning: syntax ambiguity - badly delimited number '0.01s' in line 8 of <stdin> splits into two tokens
Error: <stdin>: syntax error in line 8 near 's'
dot content like:
N1_2 [label = "plan_digest:)HJøì³;×!ªÚ*eçwÑw^?½ïªC<9f>^_;Î:zEi<8f>«\nsql_digest:^T^YÜ?B<9d>8ªc<V~<9a>s<82>Ä^E^@$6yߧ~<81>¨ãì¹Cnâ" id="N1_2" fontsize=8 shape=box3d tooltip="0.01s"]
workaround that works for me https://github.com/cockroachdb/cockroach/issues/101523#issuecomment-1552212450