[Bug libfortran/42996] Incorrect length returned from get_command_argument intrinsic

2010-02-09 Thread burnus at gcc dot gnu dot org


--- Comment #4 from burnus at gcc dot gnu dot org  2010-02-09 17:07 ---
FIXED on the trunk (4.5).

Thanks for the bug report!


-- 

burnus at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution||FIXED


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42996



[Bug libfortran/42996] Incorrect length returned from get_command_argument intrinsic

2010-02-09 Thread burnus at gcc dot gnu dot org


--- Comment #3 from burnus at gcc dot gnu dot org  2010-02-09 17:05 ---
Subject: Bug 42996

Author: burnus
Date: Tue Feb  9 17:04:57 2010
New Revision: 156630

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=156630
Log:
2010-02-09  Tobias Burnus  

PR fortran/42996
* intrinsics/args.c (get_command_argument_i4): Always return
commandline-argument length for length parameter.


Modified:
trunk/libgfortran/ChangeLog
trunk/libgfortran/intrinsics/args.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42996



[Bug libfortran/42996] Incorrect length returned from get_command_argument intrinsic

2010-02-08 Thread burnus at gcc dot gnu dot org


--- Comment #2 from burnus at gcc dot gnu dot org  2010-02-08 13:19 ---
Confirm - I get for "./a.out test" the following result.

Current (gfortran):
   With no value, length was:4 and status:0
   With LEN=1 value, length was:1 and status:-1 < Bad: len = 1
   With LEN=10 value, length was:4 and status:0

Expected (NAG f95, ifort):
   With no value, length was:4 and status:0
   With LEN=1 value, length was:4 and status:-1 < OK: len = 4
   With LEN=10 value, length was:4 and status:0

By the way, the manual is correct:
http://gcc.gnu.org/onlinedocs/gfortran/GET_005fCOMMAND_005fARGUMENT.html


Draft patch:

diff --git a/libgfortran/intrinsics/args.c b/libgfortran/intrinsics/args.c
index 7187bec..83a0502 100644
--- a/libgfortran/intrinsics/args.c
+++ b/libgfortran/intrinsics/args.c
@@ -147,11 +147,9 @@ get_command_argument_i4 (GFC_INTEGER_4 *number, char
*value,
   if (value != NULL && stat_flag != GFC_GC_FAILURE)
 {
   if (arglen > value_len)
-   {
-arglen = value_len;
 stat_flag = GFC_GC_VALUE_TOO_SHORT;
-   }
-  memcpy (value, argv[*number], arglen);
+
+  memcpy (value, argv[*number], arglen > value_len ? value_len : arglen);
 }

   if (length != NULL)


-- 

burnus at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2010-02-08 13:19:24
   date||


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42996



[Bug libfortran/42996] Incorrect length returned from get_command_argument intrinsic

2010-02-08 Thread ian_harvey at bigpond dot com


--- Comment #1 from ian_harvey at bigpond dot com  2010-02-08 10:48 ---
Created an attachment (id=19819)
 --> (http://gcc.gnu.org/bugzilla/attachment.cgi?id=19819&action=view)
Simple test case

Call the resulting program with an argument longer than one character.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42996