nodejs/node · warning
Not a 'u'?
Error message
Not a 'u'?
What it means
fixAt() asserts that the character at the given position is the letter 'u' (the start of u"", u'x', or u8"" forms) before proceeding. This is a defensive internal-consistency check: the caller is expected to have already located a 'u'. Seeing it means the caller's scan logic and fixAt's assumption disagree.
Source
Thrown at deps/icu-small/source/tools/escapesrc/escapesrc.cpp:212
outstr += ('\"');
linestr.replace(origpos, (endpos-origpos+1), outstr);
return false; // OK
}
/**
* fix the u"x"/u'x'/u8"x" string at the position
* u8'x' is not supported, sorry.
* @param linestr the input string
* @param pos the position
* @return false = no err, true = had err
*/
bool fixAt(std::string &linestr, size_t pos) {
size_t origpos = pos;
if(linestr[pos] != 'u') {
fprintf(stderr, "Not a 'u'?");
return true;
}
pos++; // past 'u'
bool utf8 = false;
if(linestr[pos] == '8') { // u8"
utf8 = true;
pos++;
}
char quote = linestr[pos];
if(quote != '\'' && quote != '\"') {
fprintf(stderr, "Quote is '%c' - not sure what to do.\n", quote);
return true;
}View on GitHub (pinned to 1b2de5e052)
Solutions
- Confirm the input source uses only supported prefixes (u, U, u8, L) as documented; avoid u8R/UR raw forms which escapesrc does not handle.
- If you are modifying escapesrc, trace the caller of fixAt and fix the index/skip logic so pos lands on a real 'u'.
- Report the input line upstream if a standard literal prefix is mis-scanned.
Defensive patterns
Strategy: validation
Validate before calling
// confirm the scanned position is actually a u-prefixed literal before calling fixAt
if (linestr[pos] != 'u' && linestr[pos] != 'U' && linestr[pos] != 'L') { /* skip, not a literal */ } Prevention
- Keep escapesrc's scanner and fixAt's prefix assumptions in sync when patching the tool.
- Add a unit test fixture covering each supported prefix.
When it happens
Trigger: fixAt(linestr, pos) is called with a pos where linestr[pos] is not 'u' — e.g. an 'R' raw-string prefix, an identifier that merely contains 'u', or an off-by-one in the scanning loop. In normal operation this branch is unreachable.
Common situations: A new C++ string prefix the tool does not model (like raw u8R"(...)" or a user-defined literal suffix) confuses the scanner; an upstream edit to the line-classification logic introduced an index error.
Related errors
- Quote is '%c' - not sure what to do.\n
- Cannot do u8'...'\n
- %s: usage: %s infile.cpp outfile.cpp
- Illegal code point U+%X\n
- Illegal utf-8 sequence at Column: %d\n
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/34881d29ca92f618.
Report an issue: GitHub.