{"record":{"id":"72a7cc1938f652a8","repo":"TechnitiumSoftware/DnsServer","slug":"soarecordinfo-format-version-not-supported","errorCode":null,"errorMessage":"SOARecordInfo format version not supported.","messagePattern":"SOARecordInfo format version not supported\\.","errorType":"exception","errorClass":"InvalidDataException","httpStatus":null,"severity":"critical","filePath":"DnsServerCore/Dns/ResourceRecords/SOARecordInfo.cs","lineNumber":83,"sourceCode":"                        NameServerAddress[] primaryNameServers = new NameServerAddress[count];\n\n                        for (int i = 0; i < primaryNameServers.Length; i++)\n                            primaryNameServers[i] = new NameServerAddress(bR);\n\n                        _primaryNameServers = primaryNameServers;\n                    }\n\n                    _zoneTransferProtocol = (DnsTransportProtocol)bR.ReadByte();\n                    _tsigKeyName = bR.BaseStream.ReadShortString();\n                    _useSoaSerialDateScheme = bR.ReadBoolean();\n                    break;\n\n                case 2:\n                    _useSoaSerialDateScheme = bR.ReadBoolean();\n                    break;\n\n                default:\n                    throw new InvalidDataException(\"SOARecordInfo format version not supported.\");\n            }\n        }\n\n        protected override void WriteExtendedRecordInfoTo(BinaryWriter bW)\n        {\n            bW.Write((byte)2); //version\n\n            bW.Write(_useSoaSerialDateScheme);\n        }\n\n        #endregion\n\n        #region properties\n\n        public override bool Disabled\n        {\n            get { return base.Disabled; }\n            set","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Dns/ResourceRecords/SOARecordInfo.cs#L65-L101","documentation":"Thrown by SOARecordInfo.ReadExtendedRecordInfoFrom when the version byte is neither 1 nor 2. Version 1 carries zone-transfer protocol, TSIG key name, and the SOA-serial-date flag; version 2 slimmed down to just the serial-date flag (current writer). The default rejects any other version to prevent misreading the extended block that precedes the SOA RDATA.","triggerScenarios":"Deserializing a SOA record whose extended-info version byte is outside {1,2}, from a corrupt file, a truncated stream, or a file produced by an incompatible server build.","commonSituations":"Downgrade after the v1->v2 SOARecordInfo change; zone file corruption; restore of a zone from an incompatible build.","solutions":["Restore the zone (especially the SOA) from a compatible backup.","Re-create the SOA record manually with correct primary nameserver, admin email, and serial, then reload the zone.","Upgrade to the build that wrote the file, export the zone as text, then re-import on the target build."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { soa.Load(); }\ncatch (InvalidDataException ex) when (ex.Message == \"SOARecordInfo format version not supported.\")\n{ _log.Error(\"SOA store incompatible; restore zone from backup or recreate SOA.\"); }","preventionTips":["Always keep a text export of zones including SOA before downgrading.","Document primary NS, admin email, and serial so a SOA can be rebuilt if the binary store fails."],"tags":["serialization","soa-record","version","deserialization","zone"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}