--- stdcxx-4.2.1/src/collate.cpp	2008-04-24 20:25:19.000000000 -0400
+++ stdcxx-4.2.1/src/collate.cpp	2009-07-24 00:21:41.000000000 -0400
@@ -525,7 +525,11 @@
         // provide a destination buffer to strxfrm() in case
         // it's buggy (such as MSVC's) and tries to write to
         // the buffer even if it's 0
+#if defined(sun) || defined(__sun) || defined(__sun__)
+        char* just_in_case_buf  = 0;
+#else
         char just_in_case_buf [8];
+#endif
         const _RWSTD_SIZE_T dst_size = strxfrm (just_in_case_buf, psrc, 0);
 
         // check for strxfrm() errors
@@ -541,8 +545,10 @@
             res.resize (res_size + dst_size + 1);
         }
         _CATCH (...) {
-            if (pbuf != buf)
+            if (pbuf != buf) {
                 delete[] pbuf;
+                pbuf = 0;
+            }
             _RETHROW;
         }
 
@@ -567,14 +573,18 @@
             res.resize (res_size);
         }
         _CATCH (...) {
-            if (pbuf != buf)
+            if (pbuf != buf) {
                 delete[] pbuf;
+                pbuf = 0;
+            }
             _RETHROW;
         }
     }
 
-    if (pbuf != buf)
+    if (pbuf != buf) {
         delete[] pbuf;
+        pbuf = 0;
+    }
 
     return res;
 }
