{"id":"e173577cc72b2f91","repo":"jackc/pgx","slug":"invalid-digitsread-d-this-can-t-happen","errorCode":null,"errorMessage":"invalid digitsRead: %d (this can't happen)","messagePattern":"invalid digitsRead: (.+?) \\(this can't happen\\)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pgtype/numeric.go","lineNumber":676,"sourceCode":"\n\t// int(ndigits) before the addition: ndigits is a uint16, so ndigits+3\n\t// would wrap for counts above 65532 and skip the loop entirely.\n\tfor i := 0; i < (int(ndigits)+3)/4; i++ {\n\t\tint64accum, digitsRead := nbaseDigitsToInt64(r, int(ndigits)-i*4)\n\n\t\tif i > 0 {\n\t\t\tvar mul *big.Int\n\t\t\tswitch digitsRead {\n\t\t\tcase 1:\n\t\t\t\tmul = bigNBase\n\t\t\tcase 2:\n\t\t\t\tmul = bigNBaseX2\n\t\t\tcase 3:\n\t\t\t\tmul = bigNBaseX3\n\t\t\tcase 4:\n\t\t\t\tmul = bigNBaseX4\n\t\t\tdefault:\n\t\t\t\treturn fmt.Errorf(\"invalid digitsRead: %d (this can't happen)\", digitsRead)\n\t\t\t}\n\t\t\taccum.Mul(accum, mul)\n\t\t}\n\n\t\taccum.Add(accum, big.NewInt(int64accum))\n\t}\n\n\tif err := r.Finish(); err != nil {\n\t\treturn fmt.Errorf(\"numeric: %w\", err)\n\t}\n\n\texp := (int32(weight) - int32(ndigits) + 1) * 4\n\n\tif dscale > 0 {\n\t\tfracNBaseDigits := int(ndigits) - int(weight) - 1\n\t\tfracDecimalDigits := fracNBaseDigits * 4\n\t\tdscaleInt := int(dscale)\n","sourceCodeStart":658,"sourceCodeEnd":694,"githubUrl":"https://github.com/jackc/pgx/blob/ec1a0befd22592cffffdeeb0a50311b506372f4c/pgtype/numeric.go#L658-L694","documentation":"Error \"invalid digitsRead: %d (this can't happen)\" thrown in jackc/pgx.","triggerScenarios":"Thrown at pgtype/numeric.go:676 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":[],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"analyzedSha":"ec1a0befd22592cffffdeeb0a50311b506372f4c","analyzedAt":"2026-08-04T22:52:11.263Z","schemaVersion":2}