{"record":{"id":"d22703799fea764d","repo":"Yalantis/uCrop","slug":"load-ascii-specified-filename-is-null","errorCode":null,"errorMessage":"load_ascii(): Specified filename is (null).","messagePattern":"load_ascii\\(\\): Specified filename is \\(null\\)\\.","errorType":"validation","errorClass":"CImgArgumentException","httpStatus":null,"severity":"error","filePath":"ucrop/src/main/jni/CImg.h","lineNumber":56654,"sourceCode":"\n    //! Load image from an ascii file \\inplace.\n    static CImg<T> get_load_ascii(const char *const filename) {\n      return CImg<T>().load_ascii(filename);\n    }\n\n    //! Load image from an ascii file \\overloading.\n    CImg<T>& load_ascii(std::FILE *const file) {\n      return _load_ascii(file,0);\n    }\n\n    //! Loadimage from an ascii file \\newinstance.\n    static CImg<T> get_load_ascii(std::FILE *const file) {\n      return CImg<T>().load_ascii(file);\n    }\n\n    CImg<T>& _load_ascii(std::FILE *const file, const char *const filename) {\n      if (!file && !filename)\n        throw CImgArgumentException(_cimg_instance\n                                    \"load_ascii(): Specified filename is (null).\",\n                                    cimg_instance);\n\n      std::FILE *const nfile = file?file:cimg::fopen(filename,\"rb\");\n      CImg<charT> line(256); *line = 0;\n      int err = std::fscanf(nfile,\"%255[^\\n]\",line._data);\n      unsigned int dx = 0, dy = 1, dz = 1, dc = 1;\n      cimg_sscanf(line,\"%u%*c%u%*c%u%*c%u\",&dx,&dy,&dz,&dc);\n      err = std::fscanf(nfile,\"%*[^0-9.eEinfa+-]\");\n      if (!dx || !dy || !dz || !dc) {\n        if (!file) cimg::fclose(nfile);\n        throw CImgIOException(_cimg_instance\n                              \"load_ascii(): Invalid ascii header in file '%s', image dimensions are set \"\n                              \"to (%u,%u,%u,%u).\",\n                              cimg_instance,\n                              filename?filename:\"(FILE*)\",dx,dy,dz,dc);\n      }\n      assign(dx,dy,dz,dc);","sourceCodeStart":56636,"sourceCodeEnd":56672,"githubUrl":"https://github.com/Yalantis/uCrop/blob/f788b534b48c144edf786c8cddbf0e029e637804/ucrop/src/main/jni/CImg.h#L56636-L56672","documentation":"CImg<T>::load_ascii() requires either an open std::FILE* or a non-null filename; when both are null it throws CImgArgumentException before doing any I/O. This guards _load_ascii against dereferencing nothing to read from.","triggerScenarios":"Calling load_ascii(nullptr) or load_ascii((std::FILE*)0, nullptr) — i.e. the argument-dispatch overload resolved to both file and filename being NULL.","commonSituations":"Passing an uninitialized/NULL CImgFileAssigner or forgetting to supply the path; forwarding a filename variable that was never set.","solutions":["Pass a valid filename string or an already-open FILE* to load_ascii.","Null-check the path variable before calling and report a clearer error upstream.","If loading from memory, use load_cimg on a stream/buffer instead of ASCII file loading."],"exampleFix":"// before\nimg.load_ascii(filename); // filename == nullptr\n// after\nif (filename) img.load_ascii(filename);\nelse throw std::runtime_error(\"ascii filename not set\");","handlingStrategy":"type-guard","validationCode":"if (!filename) throw std::invalid_argument(\"load_ascii requires a filename\");","typeGuard":"bool hasAsciiSource(std::FILE* f, const char* name){ return f != nullptr || name != nullptr; }","tryCatchPattern":"try { img.load_ascii(filename); } catch (cimg_library::CImgArgumentException& e) { /* null filename */ }","preventionTips":["Initialize filename variables before loader calls","Assert non-null inputs at API boundaries","Prefer passing FILE* you control when streaming"],"tags":["cimg","null-argument","ascii"],"backgroundTag":"missing-required-argument","analyzedSha":"f788b534b48c144edf786c8cddbf0e029e637804","analyzedAt":"2026-09-08T08:36:04.887Z","contentChangedAt":"2026-09-08T08:36:04.887Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}