{"record":{"id":"96c210bcad390b77","repo":"nodejs/node","slug":"icupkg-s-is-not-a-pool-bundle","errorCode":null,"errorMessage":"icupkg: %s is not a pool bundle\n","messagePattern":"icupkg: (.+?) is not a pool bundle\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"deps/icu-small/source/tools/toolutil/pkgitems.cpp","lineNumber":407,"sourceCode":"\n    if(resData.usesPoolBundle) {\n        char poolName[200];\n        makeTargetName(itemName, \"pool\", 4, \".res\", poolName, static_cast<int32_t>(sizeof(poolName)), pErrorCode);\n        if(U_FAILURE(*pErrorCode)) {\n            return;\n        }\n        check(context, itemName, poolName);\n        int32_t index=pkg->findItem(poolName);\n        if(index<0) {\n            // We cannot work with a bundle if its pool resource is missing.\n            // check() already printed a complaint.\n            return;\n        }\n        // TODO: Cache the native version in the Item itself.\n        nativePool.setItem(pkg->getItem(index), ures_swap);\n        const UDataInfo *poolInfo=nativePool.getDataInfo();\n        if(poolInfo->formatVersion[0]<=1) {\n            fprintf(stderr, \"icupkg: %s is not a pool bundle\\n\", poolName);\n            return;\n        }\n        const int32_t* poolRoot = reinterpret_cast<const int32_t*>(nativePool.getBytes());\n        const int32_t *poolIndexes=poolRoot+1;\n        int32_t poolIndexLength=poolIndexes[URES_INDEX_LENGTH]&0xff;\n        if(!(poolIndexLength>URES_INDEX_POOL_CHECKSUM &&\n             (poolIndexes[URES_INDEX_ATTRIBUTES]&URES_ATT_IS_POOL_BUNDLE))\n        ) {\n            fprintf(stderr, \"icupkg: %s is not a pool bundle\\n\", poolName);\n            return;\n        }\n        if(resData.pRoot[1+URES_INDEX_POOL_CHECKSUM]==poolIndexes[URES_INDEX_POOL_CHECKSUM]) {\n            resData.poolBundleKeys = reinterpret_cast<const char*>(poolIndexes + poolIndexLength);\n            resData.poolBundleStrings = reinterpret_cast<const uint16_t*>(poolRoot + poolIndexes[URES_INDEX_KEYS_TOP]);\n        } else {\n            fprintf(stderr, \"icupkg: %s has mismatched checksum for %s\\n\", poolName, itemName);\n            return;\n        }","sourceCodeStart":389,"sourceCodeEnd":425,"githubUrl":"https://github.com/nodejs/node/blob/1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e/deps/icu-small/source/tools/toolutil/pkgitems.cpp#L389-L425","documentation":"Warning printed when a bundle's declared pool bundle has a format version <= 1, meaning it predates the pool bundle feature (introduced in format version 2). The pool bundle cannot provide shared keys/strings. The function returns without setting an error code — enumeration continues without pool bundle support.","triggerScenarios":"A .res bundle has usesPoolBundle=true; icupkg finds the pool.res via makeTargetName and pkg->findItem; nativePool is set up; poolInfo->formatVersion[0] is checked and found to be <= 1 at pkgitems.cpp:407.","commonSituations":"Mixing .res files from ICU versions before pool bundle support (ICU < 4.8) with newer bundles that expect pool bundles; using a stale or incorrectly generated pool.res; downgrading ICU data files without regenerating the pool.","solutions":["Regenerate pool.res and all dependent bundles with the same ICU version (at least 4.8+ for pool bundle support).","Ensure the pool.res file referenced by the bundle is the one generated alongside it, not from an older ICU build.","If working with old format data, rebuild the entire data package from source with the current genrb/icupkg."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// Verify pool bundle format version before packaging\n// Pool bundles must have formatVersion[0] >= 2\nimport subprocess\nresult = subprocess.run(['icuinfo', '-v', 'pool.res'], capture_output=True)\n# Check that format version >= 2","typeGuard":null,"tryCatchPattern":"// This is a warning, not fatal; check stderr\nresult = subprocess.run(['icupkg', 'bundle.dat'], capture_output=True)\nif 'is not a pool bundle' in result.stderr.decode():\n    print('Pool bundle format too old or missing — regenerate with current ICU')","preventionTips":["Generate pool.res with genrb using ICU 4.8 or later.","Build pool.res and all dependent bundles in the same build run.","Don't reuse pool.res from older ICU builds."],"tags":["icu","resource-bundle","pool-bundle","format-version","version-mismatch"],"backgroundTag":null,"analyzedSha":"1b2de5e052fc0fb95fd7fb6846dcec4ade598e9e","analyzedAt":"2026-08-13T00:53:24.642Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}