diff --git a/src/builtin.cmod b/src/builtin.cmod
index 402889d839d15780e1de600e417bbefb0aa0ccae..8392e67222c985ed15e6a4d04c87c3e20f056fed 100644
--- a/src/builtin.cmod
+++ b/src/builtin.cmod
@@ -3088,11 +3088,11 @@ PIKECLASS Buffer
   PIKEFUN int|Buffer `[](int index, int|void end_or_none)
   {
     struct Buffer_struct *str = THIS;
-    struct pike_string *s;
-    unsigned len = 0,shift;
-    void *p;
+    struct pike_string *s = str->str.s;
+    unsigned len = 0,shift = 0;
+    void *p = NULL;
 
-    if (s = str->str.s)
+    if (s)
       len = s->len, shift = s->size_shift, p = s->str;
 
     if (args==1) {
@@ -3135,12 +3135,12 @@ PIKECLASS Buffer
   PIKEFUN int `[]=(int index, int ch)
   {
     struct Buffer_struct *str = THIS;
-    struct pike_string *s;
-    unsigned len = 0,shift;
-    void *p;
+    struct pike_string *s = str->str.s;
+    unsigned len = 0,shift = 0;
+    void *p = NULL;
 
     pop_n_elems(args);
-    if (s = str->str.s)
+    if (s)
       len = s->len, shift = s->size_shift, p = s->str;
 
     if (index<0)
@@ -3388,12 +3388,12 @@ PIKECLASS Buffer
   {
     struct Buffer_struct *str = THIS, *str2;
     struct object *res;
-    struct pike_string *s;
-    unsigned len = 0,shift;
-    void *p;
+    struct pike_string *s = str->str.s;
+    unsigned len = 0,shift = 0;
+    void *p = NULL;
     INT_TYPE end,vdiscard;
 
-    if (s = str->str.s)
+    if (s)
       len = s->len, shift = s->size_shift, p = s->str;
 
     end = args==1 ? len-1 : end_or_none->u.integer;