[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#301038: imagefs crash



tag 301038 patch
thanks

It appears that the imagefs crash can be avoided by pre-creating the
file.  It will crash if the file doesn't exist, but seems to succeed
if you /usr/bin/touch the file beforehand.

There's something wrong with the constructor CImage::CImage.  When you
try to create a file, its boolean create parameters is true; but the
code is wrong somehow, and strace has:

  open("z", O_RDWR)                       = -1 ENOENT (No such file or directory)

instead of creat("z").  So, someone that actually knows something
about c++ needs to look at the code an either create the file
beforehand, or add a flag similar to O_CREAT.

There are other problems, too, but they seem to be caused only by lack
of input checking:

$ imagefs d a
Read directory from image file [a].
Fatal: could not open file a.
Directory listing: 
Segmentation fault (core dumped)

$ imagefs r a c
Remove files from image file [a].
Fatal: could not open file a.
Segmentation fault (core dumped)

That's pretty simple to solve:
    catch (...)
    {
      cout << "Fatal: could not open file " << pcImageFile << "." << endl;
+     return 1;
    }

There are several instances of these.  Probably there should be a
wrapper function which outputs "Fatal: %s" to stderr, and exit(1) (or
whatever the c++ification of exit is).

Justin



Reply to: