{"record":{"id":"e37ee52575c36c34","repo":"DrKLO/Telegram","slug":"invalid-jpeg-quality-value-n","errorCode":null,"errorMessage":"Invalid JPEG quality value!\\n","messagePattern":"Invalid JPEG quality value!\\\\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"TMessagesProj/jni/mozjpeg/yuvjpeg.c","lineNumber":129,"sourceCode":"  JSAMPROW cbrow_pointer[8];\n  JSAMPROW crrow_pointer[8];\n  JSAMPROW *plane_pointer[3];\n  int y;\n\n  if (argc != 5) {\n    fprintf(stderr, \"Required arguments:\\n\");\n    fprintf(stderr, \"1. JPEG quality value, 0-100\\n\");\n    fprintf(stderr, \"2. Image size (e.g. '512x512')\\n\");\n    fprintf(stderr, \"3. Path to YUV input file\\n\");\n    fprintf(stderr, \"4. Path to JPG output file\\n\");\n    return 1;\n  }\n\n  errno = 0;\n\n  quality = strtol(argv[1], NULL, 10);\n  if (errno != 0 || quality < 0 || quality > 100) {\n    fprintf(stderr, \"Invalid JPEG quality value!\\n\");\n    return 1;\n  }\n\n  matches = sscanf(argv[2], \"%dx%d\", &luma_width, &luma_height);\n  if (matches != 2) {\n    fprintf(stderr, \"Invalid image size input!\\n\");\n    return 1;\n  }\n  if (luma_width <= 0 || luma_height <= 0) {\n    fprintf(stderr, \"Invalid image size input!\\n\");\n    return 1;\n  }\n\n  chroma_width = (luma_width + 1) >> 1;\n  chroma_height = (luma_height + 1) >> 1;\n\n  /* Will check these for validity when opening via 'fopen'. */\n  yuv_path = argv[3];","sourceCodeStart":111,"sourceCodeEnd":147,"githubUrl":"https://github.com/DrKLO/Telegram/blob/45ab8f4308496e1f01026a97fcdb0d58a5274474/TMessagesProj/jni/mozjpeg/yuvjpeg.c#L111-L147","documentation":"yuvjpeg parses argv[1] as the JPEG quality via strtol. If errno is non-zero after the conversion (overflow/no-digits) OR the value is < 0 or > 100, it prints `Invalid JPEG quality value!` and returns 1. This guards the libjpeg quality parameter, which only has defined behaviour in [0,100].","triggerScenarios":"Invoking `yuvjpeg <q> ...` where <q> is non-numeric, empty, out of integer range (ERANGE), or numerically outside 0-100 (e.g. 120 or -5).","commonSituations":"Passing a float like 90.5 (strtol stops at '.', may parse 90 but is suspect), a percentage sign like '90%', a blank argument, or a value over 100 from a misconfigured UI slider.","solutions":["Pass an integer quality strictly in [0,100].","Clamp the value in the caller: q = max(0, min(100, q)).","Validate argv[1] matches ^[0-9]{1,3}$ and is <= 100 before invoking."],"exampleFix":"// before\nyuvjpeg 120 512x512 in.yuv out.jpg\n// after\nyuvjpeg 100 512x512 in.yuv out.jpg","handlingStrategy":"validation","validationCode":"#include <errno.h>\n#include <stdlib.h>\nerrno = 0;\nlong q = strtol(argv[1], NULL, 10);\nif (errno != 0 || q < 0 || q > 100) { /* reject; do not invoke yuvjpeg */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Clamp quality to [0,100] in the caller.","Reject non-integer quality strings upstream.","Watch for trailing units like '%' or 'q' attached to the number."],"tags":["cli","jpeg","mozjpeg","yuvjpeg","input-validation","numeric"],"backgroundTag":null,"analyzedSha":"45ab8f4308496e1f01026a97fcdb0d58a5274474","analyzedAt":"2026-08-14T05:19:30.815Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}