nodejs/node · error
icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(
Error message
icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(%s: %08x) failed\n
What it means
Diagnostic fprintf (not a distinct error code itself) printed when recursive dependency enumeration of a TABLE-type resource item fails. The child call to ures_enumDependencies set a failure code in pErrorCode, so the parent loop breaks and logs the table resource handle, index, and key that caused the failure. The underlying error code is whatever the child set (e.g. U_UNSUPPORTED_ERROR, U_BUFFER_OVERFLOW_ERROR).
Source
Thrown at deps/icu-small/source/tools/toolutil/pkgitems.cpp:339
break;
case URES_TABLE:
{
/* recurse */
int32_t count=res_countArrayItems(pResData, res);
for(int32_t i=0; i<count; ++i) {
const char *itemKey;
Resource item=res_getTableItemByIndex(pResData, res, i, &itemKey);
// This doCheckParent return value is needed to
// propagate the possible false value from depth=1 to depth=0.
doCheckParent &= ures_enumDependencies(
itemName, pResData,
item, itemKey,
inKey, depth+1,
check, context,
pkg,
pErrorCode);
if(U_FAILURE(*pErrorCode)) {
fprintf(stderr, "icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(%s: %08x) failed\n",
itemName, res, i, itemKey, item);
break;
}
}
}
break;
case URES_ARRAY:
{
/* recurse */
int32_t count=res_countArrayItems(pResData, res);
for(int32_t i=0; i<count; ++i) {
Resource item=res_getArrayItem(pResData, res, i);
ures_enumDependencies(
itemName, pResData,
item, nullptr,
inKey, depth+1,
check, context,
pkg,View on GitHub (pinned to 1b2de5e052)
Solutions
- Look at the stderr output immediately preceding this message — the child enumeration that failed will have printed its own error (e.g. '%%ALIAS contains a /' or 'alias locale ID length too long'). Fix that root cause first.
- Rebuild the entire .res bundle from source with genrb to eliminate any corruption in nested table items.
- Use icuinfo or derb to dump the bundle and inspect the table item at the logged index and resource handle.
Defensive patterns
Strategy: try-catch
Try / catch
// This is a diagnostic message from icupkg CLI; the root cause is a child error
// Capture full stderr to identify the underlying child enumeration failure
result = subprocess.run(['icupkg', '--list', 'bundle.res'], capture_output=True)
stderr_lines = result.stderr.decode().splitlines()
# The child error appears before the 'table.recurse failed' line
for i, line in enumerate(stderr_lines):
if 'table' in line and 'recurse' in line and 'failed' in line:
print(f'Child error: {stderr_lines[i-1] if i > 0 else "unknown"}') Prevention
- Always check the full stderr output, not just the last line — the child error that caused recursion failure appears first.
- Keep .res bundles internally consistent by building from source with genrb.
- Use derb to dump and inspect table contents when debugging.
When it happens
Trigger: ures_enumDependencies processes a URES_TABLE resource, iterates items via res_getTableItemByIndex, recurses into each child item, and the recursive call returns U_FAILURE(*pErrorCode). The fprintf fires at pkgitems.cpp:339 and the loop breaks.
Common situations: A table within a .res bundle contains a nested resource (string, alias, sub-table) that itself triggers one of the alias/locale errors (980, 981); corrupted nested table data; version mismatch in table item encoding between the .res format and the icupkg tool.
Related errors
- icupkg/ures_enumDependencies(%s array res=%08x)[%d].recurse(
- couldn't parse the file %s. Error:%s
- U_INVALID_CHAR_FOUND
- U_UNSUPPORTED_ERROR
- icupkg: %s is not a pool bundle
AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13).
Data as JSON: /api/errors/de596b4cdfcdbc88.
Report an issue: GitHub.