{"record":{"id":"424f4a7e7947d019","repo":"shadow1ng/fscan","slug":"oracle-resend-is-not-supported","errorCode":null,"errorMessage":"oracle resend is not supported","messagePattern":"oracle resend is not supported","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugins/services/oracle_raw.go","lineNumber":334,"sourceCode":"\t_, err := s.conn.Write(buf)\n\treturn err\n}\n\nfunc (s *oracleSession) reset() {\n\ts.in = nil\n\ts.out.Reset()\n\ts.index = 0\n\ts.summary = nil\n}\n\nfunc (s *oracleSession) read(n int) ([]byte, error) {\n\tfor s.index+n > len(s.in) {\n\t\tp, err := s.readPacket()\n\t\tif err != nil {\n\t\t\treturn nil, err\n\t\t}\n\t\tif p.typ == oraclePacketResend {\n\t\t\treturn nil, errors.New(\"oracle resend is not supported\")\n\t\t}\n\t\tif p.typ != oraclePacketData {\n\t\t\treturn nil, fmt.Errorf(\"expected oracle data packet, got %d\", p.typ)\n\t\t}\n\t}\n\tret := s.in[s.index : s.index+n]\n\ts.index += n\n\treturn ret, nil\n}\n\nfunc (s *oracleSession) putBytes(data ...byte) {\n\ts.out.Write(data)\n}\n\nfunc (s *oracleSession) putString(v string) {\n\ts.putClr([]byte(v))\n}\n","sourceCodeStart":316,"sourceCodeEnd":352,"githubUrl":"https://github.com/shadow1ng/fscan/blob/95cc12e753bf43de7004e5aef42a9ffba3934303/plugins/services/oracle_raw.go#L316-L352","documentation":"When reading n bytes, the session refills its buffer via readPacket(). Oracle servers occasionally respond with a RESEND packet asking the client to retransmit. This library does not implement the resend flow, so it aborts with this error instead of silently mis-handling the exchange.","triggerScenarios":"s.read(n) requests more data than buffered, the next packet fetched has type oraclePacketResend, and the caller is any of getByte/getBytes/getInt64/getNullTermString or TestSessionRead.","commonSituations":"Slow or congested links where the server requests retransmission; large auth payloads over lossy networks; packet loss between client and listener that triggers Oracle's resend mechanism.","solutions":["Improve network reliability between client and DB (reduce packet loss, avoid flaky VPN/proxy paths) so the server never requests a resend","Retry the whole connection on this error, since resend is triggered per-connection state","Check MTU/fragmentation issues (e.g. VPN tunnels) that commonly trigger Oracle resend requests","Implement or upstream resend support in the plugin if your environment legitimately requires it"],"exampleFix":"// before\nif p.typ == oraclePacketResend {\n\treturn nil, errors.New(\"oracle resend is not supported\")\n}\n// after\nif p.typ == oraclePacketResend {\n\t// caller-level workaround: retry the entire authentication\n\treturn nil, RetryableError(errors.New(\"oracle resend is not supported\"))\n}","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"resend is not supported\") {\n\t// resend is per-connection state; restart the whole auth\n\treturn retryAuth(dsn, 3)\n}","preventionTips":["Improve link reliability to the DB host (avoid lossy VPN/proxy paths)","Check MTU settings to reduce TCP retransmits that trigger resend requests","Treat this as retryable at the connection level, not the read level"],"tags":["oracle","network","protocol","unsupported"],"backgroundTag":"unsupported-operation","analyzedSha":"95cc12e753bf43de7004e5aef42a9ffba3934303","analyzedAt":"2026-09-06T17:07:30.094Z","contentChangedAt":"2026-09-06T17:07:30.094Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}