diff --git a/avrpart.c b/avrpart.c
index acb13d5b..4ebd4eef 100644
--- a/avrpart.c
+++ b/avrpart.c
@@ -254,6 +254,7 @@ AVRMEM * avr_new_memtype(void)
   }
 
   memset(m, 0, sizeof(*m));
+  m->page_size = 1; // ensure not 0
 
   return m;
 }
diff --git a/config_gram.y b/config_gram.y
index 0b50064f..d9f661a1 100644
--- a/config_gram.y
+++ b/config_gram.y
@@ -1310,7 +1310,13 @@ mem_spec :
 
   K_PAGE_SIZE       TKN_EQUAL TKN_NUMBER
     {
-      current_mem->page_size = $3->value.number;
+      int ps = $3->value.number;
+      if (ps <= 0)
+        avrdude_message(MSG_INFO,
+                        "%s, line %d: invalid page size %d, ignored\n",
+                        infile, lineno, ps);
+      else
+        current_mem->page_size = ps;
       free_token($3);
     } |