This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Tested on i686-linux, committed on mainline.
We used to allocate a big buffer in GNAT.OS_Lib.Copy on the stack was causing
stack overflows
when called from a task with the default stack size. Furthermore,
since this unit is part of the runtime the overflow was not detected by
standard Ada checks and was potentially causing all usual nasty effects.
Following test case should not display any message:
--
gnatmake -f -u -a -fstack-check g-os_lib.adb
gnatmake -Pdefault
foo
--
with Ada.Directories; use Ada.Directories;
with Ada.Text_IO; use Ada.Text_IO;
procedure Foo is
task T is pragma Storage_Size (40_000); end T;
Big : String (1..2048);
subtype Times is Integer range 1..1000;
Name : constant String := "tmp_file";
task Body T is
D : Search_Type; F : Directory_Entry_Type; Fi : File_Type;
begin
Big (Big'Last) := 'a';
Create (Fi, Name => Name);
for I in Times loop Put (Fi, Big); end loop;
Close (Fi);
Copy_File (Name,Name & ".old");
exception
when others =>
Put_Line ("we have a problem with Copy_File");
end T;
begin null; end Foo;
--
project Default is
for Main use ("foo.adb");
package Compiler is
for Default_Switches ("ada") use ("-gnatQ", "-gnat05");
end Compiler;
end Default;
2005-06-14 Vincent Celier <celier@adacore.com>
Cyrille Comar <comar@adacore.com>
* g-os_lib.ads, g-os_lib.adb (Non_Blocking_Spawn): Two new versions
with output file descriptor and with output file name.
(Dup, Dup2): Now global procedures as they are used by two subprograms
(Copy): Allocate the 200K buffer on the heap rather than on the stack.
Attachment:
difs.31
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |