Skip to content

Commit c16a9ee

Browse files
committed
gh-153840: Escape special characters in flamegraph function names
1 parent abdd7ae commit c16a9ee

3 files changed

Lines changed: 8 additions & 2 deletions

File tree

Lib/profiling/sampling/_flamegraph_assets/flamegraph.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ function createPythonTooltip(data) {
322322
const childCount = d.children ? d.children.length : 0;
323323
const source = d.data.source;
324324

325-
const funcname = resolveString(d.data.funcname) || resolveString(d.data.name);
325+
const funcname = escapeHtml(resolveString(d.data.funcname) || resolveString(d.data.name) || "");
326326
const filename = resolveString(d.data.filename) || "";
327327
const moduleName = resolveString(d.data.module) || "";
328328
const displayName = escapeHtml(useModuleNames ? (moduleName || filename) : filename);

Lib/profiling/sampling/stack_collector.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,10 @@ def _get_source_lines(self, func):
401401
return None
402402

403403
def _create_flamegraph_html(self, data):
404-
data_json = json.dumps(data)
404+
data_json = (json.dumps(data)
405+
.replace("<", "\\u003c")
406+
.replace(">", "\\u003e")
407+
.replace("&", "\\u0026"))
405408

406409
template_dir = importlib.resources.files(__package__)
407410
vendor_dir = template_dir / "_vendor"
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Escape special characters in ``profiling.sampling`` flamegraph function
2+
names to prevent markup injection in the generated HTML report. Patch by
3+
tonghuaroot.

0 commit comments

Comments
 (0)