--- a/config.h.in +++ b/config.h.in @@ -15,6 +15,9 @@ // Define to the address where bug reports for this package should be sent. #define USTL_BUGREPORT "@PACKAGE_BUGREPORT@" +/// Define to 1 if you want to build without libstdc++ +#undef WITHOUT_LIBSTDCPP + /// Define to 1 if you want stream operations to throw exceptions on /// insufficient data or insufficient space. All these errors should /// be preventable in output code; the input code should verify the @@ -23,13 +26,10 @@ /// #undef WANT_STREAM_BOUNDS_CHECKING -#if !defined(WANT_STREAM_BOUNDS_CHECKING) && !defined(NDEBUG) +#if !defined(WANT_STREAM_BOUNDS_CHECKING) && !defined(NDEBUG) && !defined(WITHOUT_LIBSTDCPP) #define WANT_STREAM_BOUNDS_CHECKING 1 #endif -/// Define to 1 if you want to build without libstdc++ -#undef WITHOUT_LIBSTDCPP - /// Define to 1 if you don't want the standard streams. /// You will not be able to run bvt tests if you do this. /// --- a/mostream.h +++ b/mostream.h @@ -11,7 +11,9 @@ #include "memlink.h" #include "uexception.h" #include "utf8.h" +#ifdef WANT_STREAM_BOUNDS_CHECKING #include +#endif namespace ustl { --- a/uctrstrm.h +++ b/uctrstrm.h @@ -109,8 +109,12 @@ size_type n; is >> n; const size_type expectedSize = n * stream_size_of(value_type()); +#ifdef WANT_STREAM_BOUNDS_CHECKING if (expectedSize > is.remaining()) throw stream_bounds_exception ("read", typeid(v).name(), is.pos(), expectedSize, is.remaining()); +#else + assert(expectedSize <= is.remaining()); +#endif v.resize (n); nr_container_read (is, v); is.align();