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;