Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Dynamic Review: Unicode tag-character text hidden in repository files reaches the model untouched

Open
#247 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
12/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Active
Tech stack
python
Domain
security

Research direction

Read PR #246 and its review at the linked URL, then the escape code in runner/src/code_reviewer_runner/dynamic_review/tagescape.py. Check how the size accounting in #232 (T06, T08) depends on returned text being unchanged. Done means a recorded decision (strip, flag as evidence, or leave) with the reasoning, and any change limited to tagescape.py. This needs maintainer input before any code is written.

Written by the indexing model from the issue text.

Description

area: runner type: chore

Part of epic #193. Low priority; not a blocker for enabling opencode in #202.

Problem

Unicode tag characters (U+E0000 to U+E007F) render as nothing but map one to one onto ASCII (U+E0041 is "A"). Text written in them ("ASCII smuggling") can carry instructions that a reader does not see and some models decode. #243 (PR #246) ignores tag characters when it matches the <system-reminder> tag and chat-template tokens in a tool result, so a tag spelled with them is escaped. It does not touch tag-character text elsewhere in a repository file: a README, a comment or a string literal that holds hidden instructions is passed to the model untouched, in every tool result and in the checkout.

Task

  • Decide whether to strip the tag block (and the other Default_Ignorable_Code_Point characters) from tool-result text, flag it as evidence, or leave it. Everything read from a pull request is untrusted data; a strip changes the bytes the model sees, so the size accounting (#232-T06, T08) and the "text is returned as it was" rule of the escape need a decision.
  • If handled, keep it small, linear-time and idempotent, and in the same place as the escape (runner/src/code_reviewer_runner/dynamic_review/tagescape.py).

Source

Review of PR #246, "Bypasses and the 'not covered' choices": https://github.com/ExpidetGames/code-reviewer/pull/246#pullrequestreview-5511487009

Dominant language
TypeScript
Stars
0
Forks
1
Avg merge
1h 18m
Merged PRs (30d)
186

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ExpidetGames/code-reviewer

All issues in ExpidetGames/code-reviewer

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.