From e8df20d48092a1be82e41be9f3e2c8f8df4b2d98 Mon Sep 17 00:00:00 2001
From: Joerg Wunsch <j@uriah.heep.sax.de>
Date: Wed, 18 Sep 2013 05:54:37 +0000
Subject: [PATCH] bug #40055: AVRDUDE segfaults when writing eeprom * main.c:
 Always clear the UF_AUTO_ERASE flag if either a non-Xmega device was found,
 or the programmer does not offer a page_erase method.

git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@1242 81a1dc3b-b13d-400b-aceb-764788c761c2
---
 ChangeLog | 7 +++++++
 NEWS      | 2 +-
 main.c    | 3 ++-
 3 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 9f709010..e44602e7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2013-09-17  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
+
+	bug #40055: AVRDUDE segfaults when writing eeprom
+	* main.c: Always clear the UF_AUTO_ERASE flag if either a
+	non-Xmega device was found, or the programmer does not offer a
+	page_erase method.
+
 2013-09-17  Joerg Wunsch <j.gnu@uriah.heep.sax.de>
 
 	* configure.ac (AC_INIT): Bump version to post-6.0.
diff --git a/NEWS b/NEWS
index 387578bc..340d3bb4 100644
--- a/NEWS
+++ b/NEWS
@@ -17,7 +17,7 @@ Current:
     - ...
 
   * Bugfixes
-    - bug #XXXX: xxx
+    - bug #40055: AVRDUDE segfaults when writing eeprom
     - patch #XXXX: xxx
 
   * Internals:
diff --git a/main.c b/main.c
index c4c6d58d..39794867 100644
--- a/main.c
+++ b/main.c
@@ -1156,6 +1156,8 @@ int main(int argc, char * argv [])
     } else {
       AVRMEM * m;
       const char *memname = (p->flags & AVRPART_HAS_PDI)? "application": "flash";
+
+      uflags &= ~UF_AUTO_ERASE;
       for (ln=lfirst(updates); ln; ln=lnext(ln)) {
         upd = ldata(ln);
         m = avr_locate_mem(p, upd->memtype);
@@ -1163,7 +1165,6 @@ int main(int argc, char * argv [])
           continue;
         if ((strcasecmp(m->desc, memname) == 0) && (upd->op == DEVICE_WRITE)) {
           erase = 1;
-          uflags &= ~UF_AUTO_ERASE;
           if (quell_progress < 2) {
             fprintf(stderr,
                     "%s: NOTE: \"%s\" memory has been specified, an erase cycle "