{"record":{"id":"6fc4102ffb82e18b","repo":"SixLabors/ImageSharp","slug":"bad-sampling-factor-factor","errorCode":null,"errorMessage":"Bad sampling factor: {factor}","messagePattern":"Bad sampling factor: (.+?)","errorType":"exception","errorClass":"InvalidImageContentException","httpStatus":null,"severity":"error","filePath":"src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs","lineNumber":22,"sourceCode":"namespace SixLabors.ImageSharp.Formats.Jpeg;\n\ninternal static class JpegThrowHelper\n{\n    public static void ThrowNotSupportedException(string errorMessage) => throw new NotSupportedException(errorMessage);\n\n    public static void ThrowInvalidImageContentException(string errorMessage) => throw new InvalidImageContentException(errorMessage);\n\n    public static void ThrowBadMarker(string marker, int length) => throw new InvalidImageContentException($\"Marker {marker} has bad length {length}.\");\n\n    public static void ThrowNotEnoughBytesForMarker(byte marker) => throw new InvalidImageContentException($\"Input stream does not have enough bytes to parse declared contents of the {marker:X2} marker.\");\n\n    public static void ThrowBadQuantizationTableIndex(int index) => throw new InvalidImageContentException($\"Bad Quantization Table index {index}.\");\n\n    public static void ThrowBadQuantizationTablePrecision(int precision) => throw new InvalidImageContentException($\"Unknown Quantization Table precision {precision}.\");\n\n    public static void ThrowBadSampling() => throw new InvalidImageContentException(\"Bad sampling factor.\");\n\n    public static void ThrowBadSampling(int factor) => throw new InvalidImageContentException($\"Bad sampling factor: {factor}\");\n\n    public static void ThrowBadProgressiveScan(int ss, int se, int ah, int al) => throw new InvalidImageContentException($\"Invalid progressive parameters Ss={ss} Se={se} Ah={ah} Al={al}.\");\n\n    public static void ThrowInvalidImageDimensions(int width, int height) => throw new InvalidImageContentException($\"Invalid image dimensions: {width}x{height}.\");\n\n    public static void ThrowDimensionsTooLarge(int width, int height) => throw new ImageFormatException($\"Image is too large to encode at {width}x{height} for JPEG format.\");\n\n    public static void ThrowNotSupportedComponentCount(int componentCount) => throw new NotSupportedException($\"Images with {componentCount} components are not supported.\");\n\n    public static void ThrowNotSupportedColorSpace() => throw new NotSupportedException(\"Image color space could not be deduced.\");\n}\n","sourceCodeStart":4,"sourceCodeEnd":34,"githubUrl":"https://github.com/SixLabors/ImageSharp/blob/59ce6af6fc29027cda277ef62d4d1694a8acce91/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs#L4-L34","documentation":"JpegThrowHelper.ThrowBadSampling(int factor) throws InvalidImageContentException when the JPEG decoder reads a chroma/luma sampling factor from an SOF frame header that is not a valid sampling value (per JPEG spec, sampling factors must be 1-4 and powers of two per component). It signals corrupt, truncated, or non-conformant JPEG data rather than a caller mistake.","triggerScenarios":"Decoding a JPEG whose SOF0/SOF2 marker declares a component sampling factor of 0, or > 4, or a non-power-of-two value; passing a corrupted or hand-crafted JPEG byte stream to Image.Load/Image.Identify/ImageExtensions.SaveAsJpeg decode paths.","commonSituations":"Processing user-uploaded or scraped JPEGs that were corrupted in transit or by a bad resizer; fuzzed/malicious files; files produced by non-conformant encoders or bit flips on storage; concatenating streams so the decoder parses garbage as a frame header.","solutions":["Treat the input file as corrupt: re-obtain or re-download the image and validate it (e.g. Image.Identify in a probe) before processing.","Catch InvalidImageContentException around load/decode calls and skip or quarantine the offending file.","If the file is yours, re-encode it with a known-good tool (ImageSharp itself, or libjpeg-based converters) to normalize the sampling factors."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"// try\n{\n    using Image image = Image.Load(stream);\n}\ncatch (InvalidImageContentException ex)\n{\n    logger.LogWarning(ex, \"Corrupt JPEG sampling data, skipping file\");\n}","preventionTips":["Validate or re-download images from untrusted sources before processing.","Wrap batch image ingestion in per-file try-catch so one corrupt file does not abort the batch.","Pre-screen files with Image.Identify to fail fast on malformed headers."],"tags":["jpeg","decoding","corrupt-data","invalid-image-content"],"backgroundTag":"value-out-of-range","analyzedSha":"59ce6af6fc29027cda277ef62d4d1694a8acce91","analyzedAt":"2026-09-13T18:34:59.331Z","contentChangedAt":"2026-09-13T18:34:59.331Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}