diff options
author | hboehm <hboehm> | 2008-03-10 16:16:40 +0000 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2011-07-26 21:06:42 +0400 |
commit | 1aca140c127cf0c8b1199eb0149437e61c4b390c (patch) | |
tree | e72c4923d754061815f647a9b1861e2fcc7d9861 | |
parent | 8a3f5b962695e29451e96265f1c2bd572d992f16 (diff) | |
download | bdwgc-1aca140c127cf0c8b1199eb0149437e61c4b390c.tar.gz |
2008-03-10 Hans Boehm <Hans.Boehm@hp.com>
* allchblk.c (GC_allochblk): Check for overflow during size
rounding.
* tests/huge_test.c: New.
* Makefile.direct, tests/tests.am: Add huge_test.c
* Makefile.in: Regenerate.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Makefile.direct | 3 | ||||
-rw-r--r-- | Makefile.in | 29 | ||||
-rw-r--r-- | allchblk.c | 3 | ||||
-rw-r--r-- | tests/huge_test.c | 45 | ||||
-rw-r--r-- | tests/tests.am | 7 |
6 files changed, 86 insertions, 9 deletions
@@ -1,3 +1,11 @@ +2008-03-10 Hans Boehm <Hans.Boehm@hp.com> + + * allchblk.c (GC_allochblk): Check for overflow during size + rounding. + * tests/huge_test.c: New. + * Makefile.direct, tests/tests.am: Add huge_test.c + * Makefile.in: Regenerate. + 2008-02-29 Hans Boehm <Hans.Boehm@hp.com> * pthread_support.c: Fix typo in comment. diff --git a/Makefile.direct b/Makefile.direct index 765217f8..23b0ab36 100644 --- a/Makefile.direct +++ b/Makefile.direct @@ -379,7 +379,8 @@ DOC_FILES= README.QUICK doc/README.Mac doc/README.MacOSX doc/README.OS2 \ doc/simple_example.html doc/README.win64 TESTS= tests/test.c tests/test_cpp.cc tests/trace_test.c \ - tests/leak_test.c tests/thread_leak_test.c tests/middle.c + tests/leak_test.c tests/thread_leak_test.c tests/middle.c \ + tests/smash_test.c tests/huge_test.c GNU_BUILD_FILES= configure.ac Makefile.am configure acinclude.m4 \ libtool.m4 install-sh configure.host Makefile.in \ diff --git a/Makefile.in b/Makefile.in index 087ecaa1..1fd6164e 100644 --- a/Makefile.in +++ b/Makefile.in @@ -96,7 +96,8 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \ - smashtest$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) + smashtest$(EXEEXT) hugetest$(EXEEXT) $(am__EXEEXT_1) \ + $(am__EXEEXT_2) # C Library: Architecture Dependent # --------------------------------- @@ -185,6 +186,9 @@ libgccpp_la_OBJECTS = $(am_libgccpp_la_OBJECTS) am_gctest_OBJECTS = tests/test.$(OBJEXT) gctest_OBJECTS = $(am_gctest_OBJECTS) am__DEPENDENCIES_2 = $(top_builddir)/libgc.la $(am__DEPENDENCIES_1) +am_hugetest_OBJECTS = tests/huge_test.$(OBJEXT) +hugetest_OBJECTS = $(am_hugetest_OBJECTS) +hugetest_DEPENDENCIES = $(am__DEPENDENCIES_2) am_leaktest_OBJECTS = tests/leak_test.$(OBJEXT) leaktest_OBJECTS = $(am_leaktest_OBJECTS) leaktest_DEPENDENCIES = $(am__DEPENDENCIES_2) @@ -232,13 +236,14 @@ CXXLINK = $(LIBTOOL) --tag=CXX --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libcord_la_SOURCES) $(libgc_la_SOURCES) \ $(EXTRA_libgc_la_SOURCES) $(nodist_libgc_la_SOURCES) \ - $(libgccpp_la_SOURCES) $(gctest_SOURCES) $(leaktest_SOURCES) \ - $(middletest_SOURCES) $(smashtest_SOURCES) $(test_cpp_SOURCES) \ - $(threadleaktest_SOURCES) + $(libgccpp_la_SOURCES) $(gctest_SOURCES) $(hugetest_SOURCES) \ + $(leaktest_SOURCES) $(middletest_SOURCES) $(smashtest_SOURCES) \ + $(test_cpp_SOURCES) $(threadleaktest_SOURCES) DIST_SOURCES = $(libcord_la_SOURCES) $(am__libgc_la_SOURCES_DIST) \ $(EXTRA_libgc_la_SOURCES) $(am__libgccpp_la_SOURCES_DIST) \ - $(gctest_SOURCES) $(leaktest_SOURCES) $(middletest_SOURCES) \ - $(smashtest_SOURCES) $(am__test_cpp_SOURCES_DIST) \ + $(gctest_SOURCES) $(hugetest_SOURCES) $(leaktest_SOURCES) \ + $(middletest_SOURCES) $(smashtest_SOURCES) \ + $(am__test_cpp_SOURCES_DIST) \ $(am__threadleaktest_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ @@ -502,7 +507,8 @@ dist_noinst_HEADERS = include/private/gc_hdrs.h \ include/private/thread_local_alloc.h include/cord.h \ include/ec.h include/javaxfc.h TESTS = gctest$(EXEEXT) leaktest$(EXEEXT) middletest$(EXEEXT) \ - smashtest$(EXEEXT) $(am__append_6) $(am__append_8) + smashtest$(EXEEXT) hugetest$(EXEEXT) $(am__append_6) \ + $(am__append_8) pkgconfigdir = $(libdir)/pkgconfig dist_pkgconfig_DATA = bdw-gc.pc libgc_la_SOURCES = allchblk.c alloc.c blacklst.c checksums.c dbg_mlc.c \ @@ -568,6 +574,8 @@ middletest_SOURCES = tests/middle.c middletest_LDADD = $(test_ldadd) smashtest_SOURCES = tests/smash_test.c smashtest_LDADD = $(test_ldadd) +hugetest_SOURCES = tests/huge_test.c +hugetest_LDADD = $(test_ldadd) @THREADS_TRUE@threadleaktest_SOURCES = tests/thread_leak_test.c @THREADS_TRUE@threadleaktest_LDADD = $(test_ldadd) @CPLUSPLUS_TRUE@test_cpp_SOURCES = tests/test_cpp.cc @@ -721,6 +729,11 @@ tests/test.$(OBJEXT): tests/$(am__dirstamp) \ gctest$(EXEEXT): $(gctest_OBJECTS) $(gctest_DEPENDENCIES) @rm -f gctest$(EXEEXT) $(LINK) $(gctest_LDFLAGS) $(gctest_OBJECTS) $(gctest_LDADD) $(LIBS) +tests/huge_test.$(OBJEXT): tests/$(am__dirstamp) \ + tests/$(DEPDIR)/$(am__dirstamp) +hugetest$(EXEEXT): $(hugetest_OBJECTS) $(hugetest_DEPENDENCIES) + @rm -f hugetest$(EXEEXT) + $(LINK) $(hugetest_LDFLAGS) $(hugetest_OBJECTS) $(hugetest_LDADD) $(LIBS) tests/leak_test.$(OBJEXT): tests/$(am__dirstamp) \ tests/$(DEPDIR)/$(am__dirstamp) leaktest$(EXEEXT): $(leaktest_OBJECTS) $(leaktest_DEPENDENCIES) @@ -761,6 +774,7 @@ mostlyclean-compile: -rm -f cord/cordtest.lo -rm -f cord/cordxtra.$(OBJEXT) -rm -f cord/cordxtra.lo + -rm -f tests/huge_test.$(OBJEXT) -rm -f tests/leak_test.$(OBJEXT) -rm -f tests/middle.$(OBJEXT) -rm -f tests/smash_test.$(OBJEXT) @@ -808,6 +822,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@cord/$(DEPDIR)/cordprnt.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@cord/$(DEPDIR)/cordtest.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@cord/$(DEPDIR)/cordxtra.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/huge_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/leak_test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/middle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@tests/$(DEPDIR)/smash_test.Po@am__quote@ @@ -587,6 +587,9 @@ GC_allochblk(size_t sz, int kind, unsigned flags/* IGNORE_OFF_PAGE or 0 */) GC_ASSERT((sz & (GRANULE_BYTES - 1)) == 0); blocks = OBJ_SZ_TO_BLOCKS(sz); + if ((signed_word)(blocks * HBLKSIZE) < 0) { + return 0; + } start_list = GC_hblk_fl_from_blocks(blocks); /* Try for an exact match first. */ result = GC_allochblk_nth(sz, kind, flags, start_list, FALSE); diff --git a/tests/huge_test.c b/tests/huge_test.c new file mode 100644 index 00000000..248b1d71 --- /dev/null +++ b/tests/huge_test.c @@ -0,0 +1,45 @@ +#include <stdlib.h> +#include <limits.h> +#include <stdio.h> +#include <gc.h> + +/* + * Check that very large allocation requests fail. "Success" would usually + * indicate that the the size was somehow converted to a negative + * number. Clients shouldn't do this, but we should fail in the + * expected manner. + */ + + +main() +{ + GC_INIT(); + + GC_set_max_heap_size(100*1024*1024); + /* Otherwise heap expansion aborts when deallocating large block. */ + /* That's OK. We test this corner case mostly to make sure that */ + /* it fails predictably. */ + GC_expand_hp(1024*1024*5); + if (sizeof(long) == sizeof(void *)) { + void *r = GC_MALLOC(LONG_MAX-1024); + if (0 != r) { + fprintf(stderr, + "Size LONG_MAX-1024 allocation unexpectedly succeeded\n"); + exit(1); + } + r = GC_MALLOC(LONG_MAX); + if (0 != r) { + fprintf(stderr, + "Size LONG_MAX allocation unexpectedly succeeded\n"); + exit(1); + } + r = GC_MALLOC((size_t)LONG_MAX + 1024); + if (0 != r) { + fprintf(stderr, + "Size LONG_MAX+1024 allocation unexpectedly succeeded\n"); + exit(1); + } + } + return 0; +} + diff --git a/tests/tests.am b/tests/tests.am index 28593770..a9c0e73f 100644 --- a/tests/tests.am +++ b/tests/tests.am @@ -10,7 +10,7 @@ # modified is included with the above copyright notice. -## FIXME: trace_test don't works on macosx 10.3 +## FIXME: trace_test doesn't work on macosx 10.3 ## gcc -g -O2 -o .libs/tracetest trace_test.o ../.libs/libgc.dylib -lpthread ## ld: Undefined symbols: ## _GC_generate_random_backtrace @@ -41,6 +41,11 @@ check_PROGRAMS += smashtest smashtest_SOURCES = tests/smash_test.c smashtest_LDADD = $(test_ldadd) +TESTS += hugetest$(EXEEXT) +check_PROGRAMS += hugetest +hugetest_SOURCES = tests/huge_test.c +hugetest_LDADD = $(test_ldadd) + #TESTS += tracetest$(EXEEXT) #check_PROGRAMS += tracetest #tracetest_SOURCES = tests/trace_test.c |