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

  1. 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.
  2. Rebuild the entire .res bundle from source with genrb to eliminate any corruption in nested table items.
  3. 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

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


AI-assisted analysis of nodejs/node@1b2de5e052 (2026-08-13). Data as JSON: /api/errors/de596b4cdfcdbc88. Report an issue: GitHub.