From 92b05e72eab38351ab9a486e0e0ec9db11f4413b Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 29 May 2012 13:34:38 +0200 Subject: [PATCH] re PR middle-end/53510 (OOM while compile some code) PR middle-end/53510 * input.c (read_line): Use XRESIZEVEC instead of XNEWVEC to avoid leaking memory. No need to handle memory allocation failure. Double string_len on each reallocation instead of adding 2. * gcov.c (read_line): Likewise. From-SVN: r187952 --- gcc/ChangeLog | 9 +++++++++ gcc/gcov.c | 11 ++--------- gcc/input.c | 13 +++---------- 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 513405f..19048db 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2012-05-29 Jakub Jelinek + + PR middle-end/53510 + * input.c (read_line): Use XRESIZEVEC instead of XNEWVEC + to avoid leaking memory. No need to handle memory allocation + failure. Double string_len on each reallocation instead of + adding 2. + * gcov.c (read_line): Likewise. + 2012-05-29 Hans-Peter Nilsson * config/cris/cris.h (TARGET_HAS_BREAK, TARGET_TRAP_USING_BREAK8): diff --git a/gcc/gcov.c b/gcc/gcov.c index 9707111..d482399 100644 --- a/gcc/gcov.c +++ b/gcc/gcov.c @@ -2219,15 +2219,8 @@ read_line (FILE *file) return string; } pos += len; - ptr = XNEWVEC (char, string_len * 2); - if (ptr) - { - memcpy (ptr, string, pos); - string = ptr; - string_len += 2; - } - else - pos = 0; + string = XRESIZEVEC (char, string, string_len * 2); + string_len *= 2; } return pos ? string : NULL; diff --git a/gcc/input.c b/gcc/input.c index 5f14489..ece7282 100644 --- a/gcc/input.c +++ b/gcc/input.c @@ -1,5 +1,5 @@ /* Data and functions related to line maps and input files. - Copyright (C) 2004, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2004, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This file is part of GCC. @@ -105,15 +105,8 @@ read_line (FILE *file) return string; } pos += len; - ptr = XNEWVEC (char, string_len * 2); - if (ptr) - { - memcpy (ptr, string, pos); - string = ptr; - string_len += 2; - } - else - pos = 0; + string = XRESIZEVEC (char, string, string_len * 2); + string_len *= 2; } return pos ? string : NULL; -- 2.7.4