www.pudn.com > CryptoPhone-src-031122.zip > stlevc.patch
diff -rdu stlevcorg/stl_alloc.h stl_evc/stl_alloc.h
--- stlevcorg/stl_alloc.h 2001-07-10 23:41:54.000000000 +0200
+++ stl_evc/stl_alloc.h 2003-09-25 15:47:08.046875000 +0200
@@ -119,7 +119,7 @@
private:
static void* _S_oom_malloc(size_t);
- static void* _S_oom_realloc(void*, size_t);
+ static void* _S_oom_realloc(void*, size_t, size_t);
#ifndef __STL_STATIC_TEMPLATE_MEMBER_BUG
static void (* __malloc_alloc_oom_handler)();
@@ -134,15 +134,23 @@
return __result;
}
- static void deallocate(void* __p, size_t /* __n */)
+ static void deallocate(void* __p, size_t __n)
{
+#ifdef __SECURE_ALLOC
+ memset(__p, 0, __n);
+#endif
free(__p);
}
- static void* reallocate(void* __p, size_t /* old_sz */, size_t __new_sz)
+ static void* reallocate(void* __p, size_t __old_sz, size_t __new_sz)
{
- void* __result = realloc(__p, __new_sz);
- if (0 == __result) __result = _S_oom_realloc(__p, __new_sz);
+ void* __result =
+#ifndef __SECURE_ALLOC
+ realloc(__p, __new_sz);
+ if (0 == __result) __result =
+#endif
+ _S_oom_realloc(__p, __old_sz, __new_sz);
+
return __result;
}
@@ -179,7 +187,7 @@
}
template
-void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __n)
+void* __malloc_alloc_template<__inst>::_S_oom_realloc(void* __p, size_t __old, size_t __n)
{
void (* __my_malloc_handler)();
void* __result;
@@ -188,7 +196,15 @@
__my_malloc_handler = __malloc_alloc_oom_handler;
if (0 == __my_malloc_handler) { __THROW_BAD_ALLOC; }
(*__my_malloc_handler)();
+#ifdef __SECURE_ALLOC
+ __result = malloc(__n);
+ memcpy(__result, __p, __old);
+ memset(__result+__old, 0, __n-__old);
+ memset(__p, 0, __old);
+ free(__p);
+#else
__result = realloc(__p, __n);
+#endif
if (__result) return(__result);
}
}
@@ -388,6 +404,9 @@
if (__n > (size_t) _MAX_BYTES)
malloc_alloc::deallocate(__p, __n);
else {
+#ifdef __SECURE_ALLOC
+ memset(__p, 0, __n);
+#endif
_Obj* __STL_VOLATILE* __my_free_list
= _S_free_list + _S_freelist_index(__n);
_Obj* __q = (_Obj*)__p;
@@ -540,9 +559,11 @@
void* __result;
size_t __copy_sz;
+#ifndef __SECURE_ALLOC
if (__old_sz > (size_t) _MAX_BYTES && __new_sz > (size_t) _MAX_BYTES) {
return(realloc(__p, __new_sz));
}
+#endif
if (_S_round_up(__old_sz) == _S_round_up(__new_sz)) return(__p);
__result = allocate(__new_sz);
__copy_sz = __new_sz > __old_sz? __old_sz : __new_sz;
diff -rdu stlevcorg/string stl_evc/string
--- stlevcorg/string 2001-07-11 22:02:18.000000000 +0200
+++ stl_evc/string 2003-09-19 10:56:48.406250000 +0200
@@ -1216,7 +1216,7 @@
if (__first != __last) {
const size_type __old_size = size();
ptrdiff_t __n = __last - __first;
- if (__n > max_size() || __old_size > max_size() - __n)
+ if ( ((size_type)__n) > max_size() || __old_size > ((size_type)(max_size() - (size_type)__n)) )
_M_throw_length_error();
if (__old_size + __n > capacity()) {
const size_type __len = __old_size + max(__old_size, (size_t) __n) + 1;