diff --git a/experimental/SkSetPoly3To3.cpp b/experimental/SkSetPoly3To3.cpp
index 1420eba..a19c5e5 100644
--- a/experimental/SkSetPoly3To3.cpp
+++ b/experimental/SkSetPoly3To3.cpp
@@ -3,7 +3,7 @@
 static void computeOuterProduct(SkScalar op[4],
                                 const SkPoint pts0[3], const SkPoint& ave0,
                                 const SkPoint pts1[3], const SkPoint& ave1) {
-    bzero(op, 4 * sizeof(op[0]));
+    sk_bzero(op, 4 * sizeof(op[0]));
     for (int i = 0; i < 3; i++) {
         SkScalar x0 = pts0[i].fX - ave0.fX;
         SkScalar y0 = pts0[i].fY - ave0.fY;
diff --git a/experimental/SkSetPoly3To3_A.cpp b/experimental/SkSetPoly3To3_A.cpp
index cc953f5..d79703b 100644
--- a/experimental/SkSetPoly3To3_A.cpp
+++ b/experimental/SkSetPoly3To3_A.cpp
@@ -31,7 +31,7 @@
 static void computeOuterProduct(SkScalar op[4],
                                 const SkPoint pts0[3], const SkPoint& ave0,
                                 const SkPoint pts1[3], const SkPoint& ave1) {
-    bzero(op, 4 * sizeof(op[0]));
+    sk_bzero(op, 4 * sizeof(op[0]));
     for (int i = 0; i < 3; i++) {
         SkScalar x0 = pts0[i].fX - ave0.fX;
         SkScalar y0 = pts0[i].fY - ave0.fY;
diff --git a/experimental/SkSetPoly3To3_D.cpp b/experimental/SkSetPoly3To3_D.cpp
index 72ee9b1..47c0946 100644
--- a/experimental/SkSetPoly3To3_D.cpp
+++ b/experimental/SkSetPoly3To3_D.cpp
@@ -17,7 +17,7 @@
                                 const SkPoint pts0[3], const SkPoint& ave0,
                                 const SkPoint pts1[3], const SkPoint& ave1) {
     SkDScalar tmp[4];
-    bzero(tmp, sizeof(tmp));
+    sk_bzero(tmp, sizeof(tmp));
     
     for (int i = 0; i < 3; i++) {
         SkScalar x0 = pts0[i].fX - ave0.fX;
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h
index 0554c73..00ecb6f 100644
--- a/include/core/SkTypes.h
+++ b/include/core/SkTypes.h
@@ -65,6 +65,11 @@
 */
 extern void  sk_free(void*);
 
+// bzero is safer than memset, but we can't rely on it, so... sk_bzero()
+static inline void sk_bzero(void* buffer, size_t size) {
+    memset(buffer, 0, size);
+}
+
 ///////////////////////////////////////////////////////////////////////
 
 #define SK_INIT_TO_AVOID_WARNING    = 0
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index 4669630..3f898bc 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -52,7 +52,7 @@
 
 class Patch {
 public:
-    Patch() { bzero(fPts, sizeof(fPts)); }
+    Patch() { sk_bzero(fPts, sizeof(fPts)); }
     ~Patch() {}
     
     void setPatch(const SkPoint pts[12]) {
diff --git a/src/core/SkBitmap.cpp b/src/core/SkBitmap.cpp
index 2513b51..5ee4c56 100644
--- a/src/core/SkBitmap.cpp
+++ b/src/core/SkBitmap.cpp
@@ -84,12 +84,12 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 SkBitmap::SkBitmap() {
-    bzero(this, sizeof(*this));
+    sk_bzero(this, sizeof(*this));
 }
 
 SkBitmap::SkBitmap(const SkBitmap& src) {
     SkDEBUGCODE(src.validate();)
-    bzero(this, sizeof(*this));
+    sk_bzero(this, sizeof(*this));
     *this = src;
     SkDEBUGCODE(this->validate();)
 }
@@ -153,7 +153,7 @@
 
 void SkBitmap::reset() {
     this->freePixels();
-    bzero(this, sizeof(*this));
+    sk_bzero(this, sizeof(*this));
 }
 
 int SkBitmap::ComputeBytesPerPixel(SkBitmap::Config config) {
@@ -1319,7 +1319,7 @@
 SkBitmap::RLEPixels::RLEPixels(int width, int height) {
     fHeight = height;
     fYPtrs = (uint8_t**)sk_malloc_throw(height * sizeof(uint8_t*));
-    bzero(fYPtrs, height * sizeof(uint8_t*));
+    sk_bzero(fYPtrs, height * sizeof(uint8_t*));
 }
 
 SkBitmap::RLEPixels::~RLEPixels() {
diff --git a/src/core/SkConcaveToTriangles.cpp b/src/core/SkConcaveToTriangles.cpp
index efad528..fa718e5 100644
--- a/src/core/SkConcaveToTriangles.cpp
+++ b/src/core/SkConcaveToTriangles.cpp
@@ -687,7 +687,7 @@
 
     // Clear everything.
     DebugPrintf("Zeroing vertices\n");
-    bzero(vta, numPts * sizeof(*vta));
+    sk_bzero(vta, numPts * sizeof(*vta));
 
     // Initialize vertices.
     DebugPrintf("Initializing vertices\n");
diff --git a/src/core/SkDraw.cpp b/src/core/SkDraw.cpp
index fa3eb55..c4ea43a 100644
--- a/src/core/SkDraw.cpp
+++ b/src/core/SkDraw.cpp
@@ -151,7 +151,7 @@
 typedef void (*BitmapXferProc)(void* pixels, size_t bytes, uint32_t data);
 
 static void D_Clear_BitmapXferProc(void* pixels, size_t bytes, uint32_t) {
-    bzero(pixels, bytes);
+    sk_bzero(pixels, bytes);
 }
 
 static void D_Dst_BitmapXferProc(void*, size_t, uint32_t data) {}
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp
index 48fa804..3d2712b 100644
--- a/src/core/SkMatrix.cpp
+++ b/src/core/SkMatrix.cpp
@@ -397,7 +397,7 @@
     }
 
     if (dst.isEmpty()) {
-        bzero(fMat, 8 * sizeof(SkScalar));
+        sk_bzero(fMat, 8 * sizeof(SkScalar));
         this->setTypeMask(kScale_Mask | kRectStaysRect_Mask);
     } else {
         SkScalar    tx, sx = SkScalarDiv(dst.width(), src.width());
diff --git a/src/core/SkPictureFlat.cpp b/src/core/SkPictureFlat.cpp
index e221e55..3b02752 100644
--- a/src/core/SkPictureFlat.cpp
+++ b/src/core/SkPictureFlat.cpp
@@ -246,7 +246,7 @@
     
     fCount = count;
     fArray = SkNEW_ARRAY(SkRefCnt*, count);
-    bzero(fArray, count * sizeof(SkRefCnt*));
+    sk_bzero(fArray, count * sizeof(SkRefCnt*));
 }
 
 SkRefCnt* SkRefCntPlayback::set(int index, SkRefCnt* obj) {
diff --git a/src/core/SkRect.cpp b/src/core/SkRect.cpp
index d602754..7d73249 100644
--- a/src/core/SkRect.cpp
+++ b/src/core/SkRect.cpp
@@ -67,7 +67,7 @@
     SkASSERT((pts && count > 0) || count == 0);
 
     if (count <= 0) {
-        bzero(this, sizeof(SkRect));
+        sk_bzero(this, sizeof(SkRect));
     } else {
 #ifdef SK_SCALAR_SLOW_COMPARES
         int32_t    l, t, r, b;
diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index cc3eb1a..7d66c2a 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -334,7 +334,7 @@
             
             glyph->toMask(&mask);
             mask.fFormat = SkMask::kA8_Format;
-            bzero(glyph->fImage, mask.computeImageSize());
+            sk_bzero(glyph->fImage, mask.computeImageSize());
             
             if (!fRasterizer->rasterize(fillPath, fillToDevMatrix, NULL,
                                         fMaskFilter, &mask,
@@ -364,7 +364,7 @@
             bm.setConfig(config, glyph->fWidth, glyph->fHeight,
                          glyph->rowBytes());
             bm.setPixels(glyph->fImage);
-            bzero(glyph->fImage, bm.height() * bm.rowBytes());
+            sk_bzero(glyph->fImage, bm.height() * bm.rowBytes());
 
             draw.fClip  = &clip;
             draw.fMatrix = &matrix;
@@ -400,7 +400,7 @@
             }
 
             // clean out our glyph, since it may be larger than dstM
-            //bzero(dst, height * dstRB);
+            //sk_bzero(dst, height * dstRB);
 
             while (--height >= 0) {
                 memcpy(dst, src, width);
@@ -576,10 +576,10 @@
     virtual void generateFontMetrics(SkPaint::FontMetrics* mx,
                                      SkPaint::FontMetrics* my) {
         if (mx) {
-            bzero(mx, sizeof(*mx));
+            sk_bzero(mx, sizeof(*mx));
         }
         if (my) {
-            bzero(my, sizeof(*my));
+            sk_bzero(my, sizeof(*my));
         }
     }
 };
diff --git a/src/gl/SkGL.cpp b/src/gl/SkGL.cpp
index 89bcdf4..1fce98f 100644
--- a/src/gl/SkGL.cpp
+++ b/src/gl/SkGL.cpp
@@ -120,7 +120,7 @@
     
     float mat[16];
     
-    bzero(mat, sizeof(mat));
+    sk_bzero(mat, sizeof(mat));
     
     mat[0] = 2 / (right - left);
     mat[5] = 2 / (top - bottom);
diff --git a/src/gl/SkGL.h b/src/gl/SkGL.h
index dd2c77f..9f79ad1 100644
--- a/src/gl/SkGL.h
+++ b/src/gl/SkGL.h
@@ -193,12 +193,12 @@
     SkGLScalar fMat[16];
     
     void reset() {
-        bzero(fMat, sizeof(fMat));
+        sk_bzero(fMat, sizeof(fMat));
         fMat[0] = fMat[5] = fMat[10] = fMat[15] = SK_GLScalar1;
     }
     
     void set(const SkMatrix& m) {
-        bzero(fMat, sizeof(fMat));
+        sk_bzero(fMat, sizeof(fMat));
         fMat[0] = SkScalarToGL(m[SkMatrix::kMScaleX]);
         fMat[4] = SkScalarToGL(m[SkMatrix::kMSkewX]);
         fMat[12] = SkScalarToGL(m[SkMatrix::kMTransX]);
diff --git a/src/gl/SkGLTextCache.cpp b/src/gl/SkGLTextCache.cpp
index 141e100..2619dc8 100644
--- a/src/gl/SkGLTextCache.cpp
+++ b/src/gl/SkGLTextCache.cpp
@@ -127,7 +127,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 SkGLTextCache::SkGLTextCache() {
-    bzero(fStrikeList, sizeof(fStrikeList));
+    sk_bzero(fStrikeList, sizeof(fStrikeList));
 }
 
 SkGLTextCache::~SkGLTextCache() {
@@ -146,7 +146,7 @@
             strike = next;
         }
     }
-    bzero(fStrikeList, sizeof(fStrikeList));
+    sk_bzero(fStrikeList, sizeof(fStrikeList));
 }
 
 SkGLTextCache::Strike* SkGLTextCache::findGlyph(const SkGlyph& glyph,
diff --git a/src/gl/SkTextureCache.cpp b/src/gl/SkTextureCache.cpp
index 17b37ca..2eb5d84 100644
--- a/src/gl/SkTextureCache.cpp
+++ b/src/gl/SkTextureCache.cpp
@@ -23,7 +23,7 @@
           fTexCountMax(countMax), fTexSizeMax(sizeMax),
           fTexCount(0), fTexSize(0) {
 
-    bzero(fHash, sizeof(fHash));
+    sk_bzero(fHash, sizeof(fHash));
     this->validate();
 }
 
@@ -52,7 +52,7 @@
     }
     
     fSorted.reset();
-    bzero(fHash, sizeof(fHash));
+    sk_bzero(fHash, sizeof(fHash));
     
     fTexCount = 0;
     fTexSize = 0;
diff --git a/src/images/SkImageDecoder_libpvjpeg.cpp b/src/images/SkImageDecoder_libpvjpeg.cpp
index 9177741..b98763e 100644
--- a/src/images/SkImageDecoder_libpvjpeg.cpp
+++ b/src/images/SkImageDecoder_libpvjpeg.cpp
@@ -107,7 +107,7 @@
     TPvJpgDecFrame frame;
     uint8*         ptrs[3];
     int32          widths[3], heights[3];
-    bzero(ptrs, sizeof(ptrs));
+    sk_bzero(ptrs, sizeof(ptrs));
     frame.ptr = ptrs;
     frame.iWidth = widths;
     frame.iHeight = heights;
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 7aa14b2..b30aba5 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -156,7 +156,7 @@
         : fSkStream(strm), fFontID(fontID) {
 //    SkDEBUGF(("SkFaceRec: opening %s (%p)\n", key.c_str(), strm));
 
-    bzero(&fFTStream, sizeof(fFTStream));
+    sk_bzero(&fFTStream, sizeof(fFTStream));
     fFTStream.size = fSkStream->getLength();
     fFTStream.descriptor.pointer = fSkStream;
     fFTStream.read  = sk_stream_read;
@@ -754,10 +754,10 @@
     if (this->setupSize()) {
         ERROR:
         if (mx) {
-            bzero(mx, sizeof(SkPaint::FontMetrics));
+            sk_bzero(mx, sizeof(SkPaint::FontMetrics));
         }
         if (my) {
-            bzero(my, sizeof(SkPaint::FontMetrics));
+            sk_bzero(my, sizeof(SkPaint::FontMetrics));
         }
         return;
     }
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index e9dfc6a..5deae35 100755
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -251,7 +251,7 @@
     SkAutoMutexAcquire  ac(gFTMutex);
     SkASSERT(fLayout);
     
-    bzero(glyph.fImage, glyph.fHeight * glyph.rowBytes());
+    sk_bzero(glyph.fImage, glyph.fHeight * glyph.rowBytes());
     CGContextRef contextRef = ::CGBitmapContextCreate(glyph.fImage,
                                               glyph.fWidth, glyph.fHeight, 8,
                                               glyph.rowBytes(), fGrayColorSpace,
diff --git a/tests/Test.cpp b/tests/Test.cpp
index 2de0183..4bbe83a 100644
--- a/tests/Test.cpp
+++ b/tests/Test.cpp
@@ -9,7 +9,7 @@
 void Reporter::resetReporting() {
     fCurrTest = NULL;
     fTestCount = 0;
-    bzero(fResultCount, sizeof(fResultCount));
+    sk_bzero(fResultCount, sizeof(fResultCount));
 }
 
 void Reporter::startTest(Test* test) {
