Laurent GUERBY wrote:
On Tue, 2009-02-17 at 16:05 -0500, Robert Dewar wrote:
Laurent GUERBY wrote:
Two obvious solutions: use Unsupress locally since there's already a others
handler or add explicit length checks.
analysis looks right, an explicit length check is more appropriate,
better to avoid the exception.
Is the following okay to commit if it passes testing?
Thanks in advance,
Laurent
2009-02-17 Laurent GUERBY <laur...@guerby.net>
* a-teioed.adb (Expand): Fix Result overflow.
Index: a-teioed.adb
===================================================================
--- a-teioed.adb (revision 144242)
+++ a-teioed.adb (working copy)
@@ -84,6 +84,10 @@
-- character has already been made, so a count of one is a
-- no-op, and a count of zero erases a character.
+ if Result_Index + Count - 2 > Result'Last then
+ raise Picture_Error;
+ end if;
+
for J in 2 .. Count loop
Result (Result_Index + J - 2) := Picture (Picture_Index - 1);
end loop;
@@ -98,6 +102,10 @@
raise Picture_Error;
when others =>
+ if Result_Index > Result'Last then
+ raise Picture_Error;
+ end if;
+
Result (Result_Index) := Picture (Picture_Index);
Picture_Index := Picture_Index + 1;
Result_Index := Result_Index + 1;
looks ok 2 me