{"record":{"id":"d1fd9f836fc3e9af","repo":"oracle/graal","slug":"unknown-root","errorCode":null,"errorMessage":"unknown root : ","messagePattern":"unknown root : ","errorType":"exception","errorClass":"IOException","httpStatus":null,"severity":"error","filePath":"compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java","lineNumber":907,"sourceCode":"                case BEGIN_GRAPH: {\n                    parseGraph();\n                    break;\n                }\n                case BEGIN_GROUP: {\n                    beginGroup();\n                    break;\n                }\n                case CLOSE_GROUP: {\n                    doCloseGroup();\n                    break;\n                }\n                case STREAM_PROPERTIES: {\n                    loadDocumentProperties();\n                    break;\n                }\n                default:\n                    reporter.reportLoadingError(ContextStrings.unknownObjectType(type), builder);\n                    throw new IOException(\"unknown root : \" + type);\n            }\n        } catch (SkipRootException ex) {\n            long s = ex.getStart();\n            long e = ex.getEnd();\n            long pos = dataSource.getMark();\n            ConstantPool pool = ex.getConstantPool();\n            if (e == -1) {\n                // skip rest of the stream\n                throw new EOFException();\n            }\n            instLog.log(Level.FINE, \"Skipping to offset {0}, {1} bytes skipped, using cpool\", new Object[]{e, e - pos, Integer.toHexString(pool == null ? 0 : System.identityHashCode(pool))});\n\n            assert s < pos && e >= pos;\n            if (pos < e) {\n                long count = e - pos;\n                byte[] scratch = new byte[(int) Math.min(count, 1024 * 1024 * 50)];\n                while (count > 0) {\n                    int l = (int) Math.min(scratch.length, count);","sourceCodeStart":889,"sourceCodeEnd":925,"githubUrl":"https://github.com/oracle/graal/blob/a66e9ccd1d7bf2552883939aa0788dfd0e294aab/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/graphio/parsing/BinaryReader.java#L889-L925","documentation":"parseRoot switches on the root-entry type byte (BEGIN_GROUP, CLOSE_GROUP, GRAPH, STREAM_PROPERTIES, ...). The default branch reports a loading error and throws IOException('unknown root : N') when the tag matches no known root entry, meaning the reader has desynchronized from the stream or the producer used an extension this reader does not know.","triggerScenarios":"Corruption or truncation earlier in the stream shifting the position so a data byte is read as a root tag; reading a file with root-entry types added by a newer/custom writer; wrong stream offset after skip handling.","commonSituations":"Mixed-version tooling (new writer, old reader/IGV), damaged files, or spliced streams that lost alignment.","solutions":["Check the numeric tag in the message against the writer's root-entry constants to see if it is a known-but-newer entry type.","Upgrade the reader to a graphio version >= the writer's.","Regenerate the dump if corruption is suspected; validate the file digest/size."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { reader.parse(); } catch (IOException e) { if (e.getMessage().startsWith(\"unknown root\")) { /* parse desync or newer entry type: upgrade reader / re-dump */ } }","preventionTips":["Upgrade the reader whenever the producer's GraalVM version changes.","Log the unknown tag value to distinguish corruption from version gaps.","Verify dump integrity before deep parsing."],"tags":["graphio","parsing","corrupt-input","versioning"],"backgroundTag":null,"analyzedSha":"a66e9ccd1d7bf2552883939aa0788dfd0e294aab","analyzedAt":"2026-08-14T13:58:47.161Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}