93 lines
2.7 KiB
Diff
93 lines
2.7 KiB
Diff
--- pegasus/src/Pegasus/Common/HTTPConnection.cpp.obz4956 2006-05-02 14:27:39.000000000 -0400
|
|
+++ pegasus/src/Pegasus/Common/HTTPConnection.cpp 2006-05-02 15:09:56.000000000 -0400
|
|
@@ -1036,10 +1036,20 @@
|
|
// reserve space for entire non-chunked message
|
|
if (_contentLength > 0)
|
|
{
|
|
- Uint32 capacity = (Uint32)(_contentLength + _contentOffset + 1);
|
|
- _incomingBuffer.reserveCapacity(capacity);
|
|
- data = (char *)_incomingBuffer.getData();
|
|
- data[capacity-1] = 0;
|
|
+ try
|
|
+ {
|
|
+ Uint32 capacity = (Uint32)(_contentLength + _contentOffset + 1);
|
|
+ _incomingBuffer.reserveCapacity(capacity);
|
|
+ data = (char *)_incomingBuffer.getData();
|
|
+ data[capacity-1] = 0;
|
|
+ }catch(const PEGASUS_STD(bad_alloc)&)
|
|
+ {
|
|
+ _throwEventFailure(HTTP_STATUS_REQUEST_TOO_LARGE,
|
|
+ "Error reserving space for non-chunked message");
|
|
+ }catch(...)
|
|
+ {
|
|
+ _throwEventFailure(httpStatusInternal, "unexpected exception");
|
|
+ }
|
|
}
|
|
|
|
break;
|
|
--- pegasus/src/Pegasus/Common/String.cpp.obz4956 2006-05-02 14:27:39.000000000 -0400
|
|
+++ pegasus/src/Pegasus/Common/String.cpp 2006-05-02 15:12:59.000000000 -0400
|
|
@@ -51,6 +51,10 @@
|
|
#include <unicode/uchar.h>
|
|
#endif
|
|
|
|
+#ifndef PEGASUS_CHECK_FOR_OVERFLOW
|
|
+#define PEGASUS_CHECK_FOR_OVERFLOW(capacity) { if (capacity > 0x3FFFFFFF) throw PEGASUS_STD(bad_alloc)(); }
|
|
+#endif
|
|
+
|
|
PEGASUS_NAMESPACE_BEGIN
|
|
|
|
//==============================================================================
|
|
@@ -166,8 +170,7 @@
|
|
{
|
|
#ifndef PEGASUS_STRING_NO_THROW
|
|
|
|
- if (x > 0x0FFFFFFF)
|
|
- throw PEGASUS_STD(bad_alloc)();
|
|
+ PEGASUS_CHECK_FOR_OVERFLOW(x);
|
|
|
|
#endif
|
|
|
|
@@ -545,9 +548,7 @@
|
|
{
|
|
#ifndef PEGASUS_STRING_NO_THROW
|
|
|
|
- // Any string bigger than this is seriously suspect.
|
|
- if (cap > 0x0FFFFFFF)
|
|
- throw PEGASUS_STD(bad_alloc)();
|
|
+ PEGASUS_CHECK_FOR_OVERFLOW(cap);
|
|
|
|
#endif
|
|
|
|
--- pegasus/src/Pegasus/Common/Buffer.cpp.obz4956 2006-03-17 13:59:03.000000000 -0500
|
|
+++ pegasus/src/Pegasus/Common/Buffer.cpp 2006-05-02 15:06:06.000000000 -0400
|
|
@@ -43,11 +43,17 @@
|
|
|
|
static const size_t MIN_CAPACITY = 2048;
|
|
|
|
+#ifndef PEGASUS_CHECK_FOR_OVERFLOW
|
|
+#define PEGASUS_CHECK_FOR_OVERFLOW(capacity) { if (capacity > 0x3FFFFFFF) throw PEGASUS_STD(bad_alloc)(); }
|
|
+#endif
|
|
+
|
|
static Uint32 _next_pow_2(Uint32 x)
|
|
{
|
|
if (x < MIN_CAPACITY)
|
|
return MIN_CAPACITY;
|
|
|
|
+ PEGASUS_CHECK_FOR_OVERFLOW(x);
|
|
+
|
|
x--;
|
|
x |= (x >> 1);
|
|
x |= (x >> 2);
|
|
@@ -132,7 +138,10 @@
|
|
_rep->size = 0;
|
|
}
|
|
else
|
|
+ {
|
|
+ PEGASUS_CHECK_FOR_OVERFLOW(_rep->cap);
|
|
_rep = _reallocate(_rep, _rep->cap ? (2 * _rep->cap) : MIN_CAPACITY);
|
|
+ }
|
|
}
|
|
|
|
void Buffer::insert(size_t pos, const char* data, size_t size)
|