{"record":{"id":"de596b4cdfcdbc88","repo":"nodejs/node","slug":"icupkg-ures-enumdependencies-s-table-res-08x-d","errorCode":null,"errorMessage":"icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(%s: %08x) failed\\n","messagePattern":"icupkg/ures_enumDependencies\\((.+?) table res=%08x\\)\\[(.+?)\\]\\.recurse\\((.+?): %08x\\) failed\\\\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deps/icu-small/source/tools/toolutil/pkgitems.cpp","lineNumber":339,"sourceCode":"        break;\n    case URES_TABLE:\n        {\n            /* recurse */\n            int32_t count=res_countArrayItems(pResData, res);\n            for(int32_t i=0; i<count; ++i) {\n                const char *itemKey;\n                Resource item=res_getTableItemByIndex(pResData, res, i, &itemKey);\n                // This doCheckParent return value is needed to\n                // propagate the possible false value from depth=1 to depth=0.\n                doCheckParent &= ures_enumDependencies(\n                        itemName, pResData,\n                        item, itemKey,\n                        inKey, depth+1,\n                        check, context,\n                        pkg,\n                        pErrorCode);\n                if(U_FAILURE(*pErrorCode)) {\n                    fprintf(stderr, \"icupkg/ures_enumDependencies(%s table res=%08x)[%d].recurse(%s: %08x) failed\\n\",\n                                    itemName, res, i, itemKey, item);\n                    break;\n                }\n            }\n        }\n        break;\n    case URES_ARRAY:\n        {\n            /* recurse */\n            int32_t count=res_countArrayItems(pResData, res);\n            for(int32_t i=0; i<count; ++i) {\n                Resource item=res_getArrayItem(pResData, res, i);\n                ures_enumDependencies(\n                        itemName, pResData,\n                        item, nullptr,\n                        inKey, depth+1,\n                        check, context,\n                        pkg,","sourceCodeStart":321,"sourceCodeEnd":357,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/icu-small/source/tools/toolutil/pkgitems.cpp#L321-L357","documentation":"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).","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// This is a diagnostic message from icupkg CLI; the root cause is a child error\n// Capture full stderr to identify the underlying child enumeration failure\nresult = subprocess.run(['icupkg', '--list', 'bundle.res'], capture_output=True)\nstderr_lines = result.stderr.decode().splitlines()\n# The child error appears before the 'table.recurse failed' line\nfor i, line in enumerate(stderr_lines):\n    if 'table' in line and 'recurse' in line and 'failed' in line:\n        print(f'Child error: {stderr_lines[i-1] if i > 0 else \"unknown\"}')","preventionTips":["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."],"tags":["icu","resource-bundle","table","recursion","diagnostic","dependency-enumeration"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}