Yalantis/uCrop · error · CImgArgumentException

load_other(): Specified filename is (null).

Error message

load_other(): Specified filename is (null).

What it means

load_other() dispatches to several non-native loaders (Magick, dcraw, ffmpeg...) based on the filename, so a valid C-string path is mandatory. If filename is NULL it immediately throws CImgArgumentException before any loading is attempted.

Source

Thrown at ucrop/src/main/jni/CImg.h:60154

                            "('-Dcimg_use_opencv' must be defined).",
                            cimg_instance);
#endif
    }

    //! Load image from a camera stream, using OpenCV \newinstance.
    static CImg<T> get_load_camera(const unsigned int camera_index=0,
                                   const unsigned int capture_width=0, const unsigned int capture_height=0,
                                   const unsigned int skip_frames=0, const bool release_camera=true) {
      return CImg<T>().load_camera(camera_index,capture_width,capture_height,skip_frames,release_camera);
    }

    //! Load image using various non-native ways.
    /**
       \param filename Filename, as a C-string.
    **/
    CImg<T>& load_other(const char *const filename) {
      if (!filename)
        throw CImgArgumentException(_cimg_instance
                                    "load_other(): Specified filename is (null).",
                                    cimg_instance);

      const unsigned int omode = cimg::exception_mode();
      cimg::exception_mode(0);
      try { load_magick(filename); }
      catch (CImgException&) {
        try { load_imagemagick_external(filename); }
        catch (CImgException&) {
          try { load_graphicsmagick_external(filename); }
          catch (CImgException&) {
            try { load_cimg(filename); }
            catch (CImgException&) {
              try {
                cimg::fclose(cimg::fopen(filename,"rb"));
              } catch (CImgException&) {
                cimg::exception_mode(omode);
                throw CImgIOException(_cimg_instance

View on GitHub (pinned to f788b534b4)

Solutions

  1. Check the pointer for null before calling load_other().
  2. Fix the source of the path (env var, config key) so it is populated; provide a default.
  3. Use the std::string overload patterns and validate non-empty before calling.

Example fix

// before
const char* path = getenv("IMG_PATH");
img.load_other(path); // NULL if unset -> throws
// after
const char* path = getenv("IMG_PATH");
if (!path || !*path) { std::cerr << "IMG_PATH not set"; return 1; }
img.load_other(path);
Defensive patterns

Strategy: validation

Validate before calling

if (!filename || !*filename) throw std::invalid_argument("load_other(): filename must be a non-null, non-empty C string");

Try / catch

try { img.load_other(path); }
catch (CImgArgumentException& e) { /* handle null/unset path */ }

Prevention

When it happens

Trigger: Passing a null const char* to load_other() — e.g. result of getenv() on an unset variable, a failed lookup, an uninitialized pointer, or std::string::c_str() of a value later nulled out.

Common situations: Filename read from configuration or environment that is missing; C API wrappers forwarding NULL; argv parsing that left the path variable unset.

Related errors


AI-assisted analysis of Yalantis/uCrop@f788b534b4 (2026-09-08). Data as JSON: /api/errors/22e752648ea4f4dd. Report an issue: GitHub.