www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4911] New: Bad error messages from attempts to write into read-only File

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4911

           Summary: Bad error messages from attempts to write into
                    read-only File
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Keywords: diagnostic
          Severity: normal
          Priority: P2
         Component: Phobos
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc



This is a wrong Python 2 program, it tries to write on a read mode file:

f = file("test.raw", "r")
f.write("hello")


Python 2.6.5 gives the run-time error:

Traceback (most recent call last):
  File "...\test.py", line 2, in <module>
    f.write("hello")
IOError: File not open for writing

-----------------------------

This is a similar D2 program:

import std.stdio: File;
void main() {
    auto f = File("test.raw", "r");
    f.write("hello");
}


It generates the run-time error (dmd 2.049):

std.exception.ErrnoException ...\dmd\src\phobos\std\stdio.d(1060):  (No error)

This error is useless, it doesn't show the line count and file of the problem,
the cause of the problem (the file is read-only) and it doesn't even clearly
show it's a I/O error.

-----------------------------

A similarly wrong D2 program:


import std.stdio: File;
void main() {
    double[3] data = [0.5, 1.5, 2.5];
    auto f = File("test.raw", "r");
    f.rawWrite(data);
}


The error it raises, far still from being a good error message:

std.exception.ErrnoException ...\dmd\src\phobos\std\stdio.d(508): Wrote 0
instead of 3 objects of type double to file `test.raw' (No error)


A much better error message may be this, that gives the line number and file
name of the module that has produced the error, shows that it's an I/O error,
explains that the bug comes from trying to write in a read-only file, and it
gives the name of the file:

FileIOException test.d(5): attempt to write into read-only file "test.raw".


(Even better, a typestate system is able to spot this bug at compile-time, see
bug 4571 ).

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 21 2010
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4911




I think in Phobos there is not (yet) a function to find the line number and
module name of the precedent stack frame, of the caller, so probably the
"test.d(5)" can't be generated in the error message, andthe programmer has to
read the stack trace.

So a more realistic error message (plus stack trace) is:

FileIOException ...\dmd\src\phobos\std\stdio.d(508): attempt to write into
read-only file "test.raw".

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 21 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4911




In DMD 2.053 this program:

import std.stdio: File;
void foo() {
    auto f = File("test.raw", "r");
    f.write("hello");
}
void bar() {
    foo();
}
void main() {
    bar();
}

Gives the error message:

std.exception.ErrnoException std\stdio.d(286): Cannot open file `test.raw' in
mode `r' (No such file or directory)
----------------
...\test.d(8): void test.bar()
...\test.d(10): _Dmain
----------------


I think this is as good as it gets, unless a function to find the line number
and module name of the precedent stack frame is used at the exception point, so
I close this bug report.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 26 2011
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=4911


bearophile_hugs eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED


-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 26 2011