diff -Nru thunderbird-24.3.0+build2/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml thunderbird-24.4.0+build1/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml --- thunderbird-24.3.0+build2/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/base/content/dialogs/calendar-event-dialog-freebusy.xml 2014-03-17 23:27:02.000000000 +0000 @@ -603,7 +603,7 @@ diff -Nru thunderbird-24.3.0+build2/calendar/base/content/dialogs/calendar-properties-dialog.js thunderbird-24.4.0+build1/calendar/base/content/dialogs/calendar-properties-dialog.js --- thunderbird-24.3.0+build2/calendar/base/content/dialogs/calendar-properties-dialog.js 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/base/content/dialogs/calendar-properties-dialog.js 2014-03-17 23:27:02.000000000 +0000 @@ -162,7 +162,7 @@ } if (refreshInterval == 0) { - setBooleanAttribute("calendar-refreshInterval-manual", "checked", true); + menulist.selectedItem = document.getElementById("calendar-refreshInterval-manual"); foundValue = true; } diff -Nru thunderbird-24.3.0+build2/calendar/base/modules/calItipUtils.jsm thunderbird-24.4.0+build1/calendar/base/modules/calItipUtils.jsm --- thunderbird-24.3.0+build2/calendar/base/modules/calItipUtils.jsm 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/base/modules/calItipUtils.jsm 2014-03-17 23:27:02.000000000 +0000 @@ -1203,8 +1203,9 @@ } } if (att) { - let firstFoundItem = this.mFoundItems.length && this.mFoundItems[0]; - let foundAttendee = firstFoundItem.getAttendeeById(att.id); + let firstFoundItem = this.mFoundItems[0]; + // again, fall back to using configured organizer if not found + let foundAttendee = firstFoundItem.getAttendeeById(att.id) || att; // If the the user hasn't responded to the invitation yet and we // are viewing the current representation of the item, show the diff -Nru thunderbird-24.3.0+build2/calendar/base/src/calTimezoneService.js thunderbird-24.4.0+build1/calendar/base/src/calTimezoneService.js --- thunderbird-24.3.0+build2/calendar/base/src/calTimezoneService.js 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/base/src/calTimezoneService.js 2014-03-17 23:27:02.000000000 +0000 @@ -95,9 +95,17 @@ this.mUTC = new calLibicalTimezone("UTC", null, "", ""); this.mUTC.mUTC = true; } - this.mTimezoneCache.UTC = this.mUTC; - this.mTimezoneCache.utc = this.mUTC; - this.mTimezoneCache.Z = this.mUTC; + + // These UTC aliases are taken from wikipedia, included in case + // other clients make use of them without specifying a definition. + const utcAliases = ["UTC", "utc", "Z", "Etc/GMT", "Etc/GMT+0", + "Etc/UCT", "Etc/Unversal", "Etc/UTC", + "Etc/Zulu", "GMT", "GMT+0", "GMT0", + "Greenwich", "UCT", "Universal", "Zulu"]; + + for (let zone of utcAliases) { + this.mTimezoneCache[zone] = this.mUTC; + } } return this.mUTC; diff -Nru thunderbird-24.3.0+build2/calendar/lightning/components/lightningTextCalendarConverter.js thunderbird-24.4.0+build1/calendar/lightning/components/lightningTextCalendarConverter.js --- thunderbird-24.3.0+build2/calendar/lightning/components/lightningTextCalendarConverter.js 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/lightning/components/lightningTextCalendarConverter.js 2014-03-17 23:27:02.000000000 +0000 @@ -77,10 +77,8 @@ let item = aItipItem.getItemList({})[0]; let summary = item.getProperty("SUMMARY") || ""; let organizer = item.organizer; - let organizerString = organizer.toString(); - if (organizer.commonName) { - organizerString = organizer.commonName; - } + let organizerString = (organizer) ? + (organizer.commonName || organizer.toString()) : ""; switch (aItipItem.responseMethod) { case "REQUEST": diff -Nru thunderbird-24.3.0+build2/calendar/sunbird/config/version.txt thunderbird-24.4.0+build1/calendar/sunbird/config/version.txt --- thunderbird-24.3.0+build2/calendar/sunbird/config/version.txt 2014-02-10 17:55:29.000000000 +0000 +++ thunderbird-24.4.0+build1/calendar/sunbird/config/version.txt 2014-03-17 23:27:02.000000000 +0000 @@ -1 +1 @@ -2.6.4 +2.6.5 diff -Nru thunderbird-24.3.0+build2/debian/changelog thunderbird-24.4.0+build1/debian/changelog --- thunderbird-24.3.0+build2/debian/changelog 2014-02-10 19:10:41.000000000 +0000 +++ thunderbird-24.4.0+build1/debian/changelog 2014-03-17 23:58:30.000000000 +0000 @@ -1,3 +1,10 @@ +thunderbird (1:24.4.0+build1-0ubuntu0.13.10.2) saucy-security; urgency=medium + + * New upstream stable release (THUNDERBIRD_24_4_0_BUILD1) + - see LP: #1293851 for USN information + + -- Chris Coulson Mon, 17 Mar 2014 23:54:43 +0000 + thunderbird (1:24.3.0+build2-0ubuntu0.13.10.1) saucy-security; urgency=low * New upstream stable release (THUNDERBIRD_24_3_0_BUILD2) diff -Nru thunderbird-24.3.0+build2/l10n/changesets thunderbird-24.4.0+build1/l10n/changesets --- thunderbird-24.3.0+build2/l10n/changesets 2014-02-10 18:12:33.000000000 +0000 +++ thunderbird-24.4.0+build1/l10n/changesets 2014-03-17 23:41:28.000000000 +0000 @@ -1,55 +1,55 @@ -ar 1101:64d446261407 -ast 908:48ff80b94656 -be 1283:48b8ffa86967 -bg 685:66c633f4682a -bn-BD 658:af8185727d1f -br 775:b1f004a55f7d -ca 1855:df3c993c4390 -cs 3033:d63c3e953122 -da 1434:3030bd321645 -de 3928:26175f9608c8 -el 993:582340973f7c -en-GB 1292:bc2a09c9732d -es-AR 1987:11e91f2eca9a -es-ES 2491:04e654cb155b -et 1250:6e5ce9680a35 -eu 1030:4ce26b1a498b -fi 1637:14f26776a88d -fr 5589:c22900d50ff8 -fy-NL 1829:04ba96efdb06 -ga-IE 1246:526b5a0ca328 -gd 1083:e2e9b7a62012 -gl 1462:6e1f3957dc5f -he 1041:8d0e4329d512 -hr 1390:8237bf4b7d6d -hu 1564:5cc762604759 -hy-AM 671:dc6b46f1d3d3 -id 1081:8e61a1f79000 -is 875:44e19783b011 -it 3704:4430e031bfe5 -ja 1676:c52c8e5f45ff -ja-JP-mac 1413:a93c68cebf77 -ko 1393:4125f602e801 -lt 2313:8cd0447dfef3 -nb-NO 2064:7e40312d633b -nl 4335:ec652bf1f7b8 -nn-NO 1151:add91622f509 -pa-IN 1343:ee72fe41cf2a -pl 5216:9ed5e4cc1126 -pt-BR 1390:e02596bbd88d -pt-PT 2616:c62f8b82dd82 -rm 900:88d0c378c20d -ro 961:cc5b396230d8 -ru 3187:76dcbf26f5da -si 960:030154d3937d -sk 1527:fcbf406c723e -sl 1358:30036b0b1f51 -sq 1304:4e97fae1c312 -sr 616:111126e14de4 -sv-SE 3646:e28769e845bc -ta-LK 647:53f6e4181a3f -tr 1400:a5e1fce9df01 -uk 2067:99a4ab0d3998 -vi 682:07e4f7148c02 -zh-CN 1716:ebf05f683fb6 -zh-TW 2094:e2d31af246e1 +ar 1128:ef240bf7998a +ast 923:b556289bb554 +be 1317:7615152c5e6d +bg 700:d4fb43fd904f +bn-BD 678:33789cb267ba +br 797:4905af68bbe5 +ca 1893:e059e0c15eb8 +cs 3086:d3a472a7b2dd +da 1481:94301ba4b95c +de 3987:6f846e5b0600 +el 1008:f371ff16cc91 +en-GB 1332:8dfe51928367 +es-AR 2027:9bd3cfb1ef82 +es-ES 3216:cfc6e7031c6c +et 1285:0a6a9c20b12b +eu 1047:b55b2f2c9327 +fi 1679:2b97a48fa244 +fr 5737:e8b367dc1c15 +fy-NL 1862:3d2099cf9c80 +ga-IE 1273:2a2c7f37a9a8 +gd 1105:d72aab807ec7 +gl 1490:6119b4bf10f7 +he 1056:595db69c9499 +hr 1412:8686700ae448 +hu 1603:3c760a908af5 +hy-AM 694:b52c7c5a020c +id 1097:e7199b4eb213 +is 892:dafaad115cdd +it 3832:f693a01d0729 +ja 1724:0db3fd564120 +ja-JP-mac 1455:c3f0d4b09aa8 +ko 1425:2673a6eef079 +lt 2348:1ae3e7ab4e46 +nb-NO 2108:ef69633df11e +nl 4403:4ae296bdc7ac +nn-NO 1170:58e463f5ccf1 +pa-IN 1371:e821bf917725 +pl 5375:4069c99e9130 +pt-BR 1424:232ea958d896 +pt-PT 2663:570fc35464c4 +rm 915:82a735f44b66 +ro 988:7bee1d1a279d +ru 3255:5d11fea469ec +si 975:a5459583ac8c +sk 1562:7a2f22a170dc +sl 1397:6597fba192d3 +sq 1359:d5f3bf161cc4 +sr 631:eb8004af302a +sv-SE 3748:44e28a0efc59 +ta-LK 649:291d736a5a8a +tr 1434:20a3228dd1d2 +uk 2127:26fccf8f851e +vi 697:15a3144ce78e +zh-CN 1755:0671dbedeab5 +zh-TW 2135:2d67c5f98649 diff -Nru thunderbird-24.3.0+build2/mail/components/compose/content/editorOverlay.xul thunderbird-24.4.0+build1/mail/components/compose/content/editorOverlay.xul --- thunderbird-24.3.0+build2/mail/components/compose/content/editorOverlay.xul 2014-02-10 17:55:29.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/components/compose/content/editorOverlay.xul 2014-03-17 23:27:03.000000000 +0000 @@ -928,13 +928,13 @@ diff -Nru thunderbird-24.3.0+build2/mail/components/compose/content/MsgComposeCommands.js thunderbird-24.4.0+build1/mail/components/compose/content/MsgComposeCommands.js --- thunderbird-24.3.0+build2/mail/components/compose/content/MsgComposeCommands.js 2014-02-10 17:55:29.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/components/compose/content/MsgComposeCommands.js 2014-03-17 23:27:03.000000000 +0000 @@ -885,16 +885,20 @@ { function getDisabledState(aElement) { if ("disabled" in aElement) - return aElement.disabled; + return (aElement.disabled ? "true" : "false"); + else if (!aElement.hasAttribute("disabled")) + return ""; else return aElement.getAttribute("disabled"); } function setDisabledState(aElement, aValue) { if ("disabled" in aElement) - aElement.disabled = aValue; + aElement.disabled = (aValue == "true"); + else if (aValue == "") + aElement.removeAttribute("disabled"); else - aElement.setAttribute("disabled", aValue ? "true" : "false"); + aElement.setAttribute("disabled", aValue); } @@ -921,7 +925,7 @@ // list so only act on it if it still has the "stateBeforeSend" // attribute. if (commandItem.hasAttribute("stateBeforeSend")) { - setDisabledState(commandItem, commandItem.getAttribute("stateBeforeSend") == "true"); + setDisabledState(commandItem, commandItem.getAttribute("stateBeforeSend")); commandItem.removeAttribute("stateBeforeSend"); } } diff -Nru thunderbird-24.3.0+build2/mail/config/version.txt thunderbird-24.4.0+build1/mail/config/version.txt --- thunderbird-24.3.0+build2/mail/config/version.txt 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/config/version.txt 2014-03-17 23:27:02.000000000 +0000 @@ -1 +1 @@ -24.3.0 +24.4.0 diff -Nru thunderbird-24.3.0+build2/mail/test/mozmill/composition/test-reply-addresses.js thunderbird-24.4.0+build1/mail/test/mozmill/composition/test-reply-addresses.js --- thunderbird-24.3.0+build2/mail/test/mozmill/composition/test-reply-addresses.js 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/test/mozmill/composition/test-reply-addresses.js 2014-03-17 23:27:02.000000000 +0000 @@ -141,6 +141,29 @@ } /** + * Helper to set an auto-bcc list for an identity. + */ +function useAutoBcc(aIdentity, aBccList) { + aIdentity.doBcc = true; + aIdentity.doBccList = aBccList; +} + +/** + * Helper to stop using auto-bcc for an identity. + */ +function stopUsingAutoBcc(aIdentity) { + aIdentity.doBcc = false; + aIdentity.doBccList = ""; +} + +/** + * Helper to ensure auto-bcc is turned off. + */ +function ensureNoAutoBcc(aIdentity) { + aIdentity.doBcc = false; +} + +/** * Tests that addresses get set properly when doing a normal reply. */ function testToCcReply() { @@ -699,6 +722,7 @@ ); useAutoCc(identity, myEmail + ", smithers@example.com"); + useAutoBcc(identity, "Lisa "); checkReply( open_compose_with_reply_to_all, // To: original To @@ -714,6 +738,83 @@ } ); stopUsingAutoCc(identity); + stopUsingAutoBcc(identity); +} + +/** + * Tests that addresses get set properly for a reply all to self - but for a + * message that is not really the original sent message. Like an auto-bcc:d copy + * or from Gmail. This should be treated as a followup. + */ +function testReplyToSelfNotOriginalSourceMsgReplyAll() { + let msg0 = create_message({ + from: myEmail2, + to: "Bart , Maggie ", + cc: "Lisa ", + subject: "testReplyToSelfNotOriginalSourceMsgReplyAll - reply to self", + clobberHeaders: { + "Reply-To": "Flanders " + } + }); + add_message_to_folder(folder, msg0); + + be_in_folder(folder); + let msg = select_click_row(i++); + assert_selected_and_displayed(mc, msg); + + ensureNoAutoCc(identity); + useAutoBcc(identity, myEmail + ", smithers@example.com"); + checkReply( + open_compose_with_reply_to_all, + // To: original To + // Cc: original Cc + // Bcc: auto-bccs + // Reply-To: original Reply-To + { + "addr_to": ["Bart ", + "Maggie "], + "addr_cc": ["Lisa "], + "addr_bcc": [myEmail, "smithers@example.com"], + "addr_reply": ["Flanders "] + } + ); + stopUsingAutoBcc(identity); + + useAutoCc(identity, myEmail + ", smithers@example.com"); + useAutoBcc(identity, "moe@example.com,bart@example.com,lisa@example.com"); + checkReply( + open_compose_with_reply_to_all, + // To: original To + // Cc: original Cc (auto-Ccs would have been included here already) + // Bcc: auto-bcc minus addressess already in To/Cc + // Reply-To: original Reply-To + { + "addr_to": ["Bart ", + "Maggie "], + "addr_cc": ["Lisa "], + "addr_bcc": ["moe@example.com"], + "addr_reply": ["Flanders "] + } + ); + stopUsingAutoCc(identity); + stopUsingAutoBcc(identity); + + useAutoBcc(identity, myEmail2 + ", smithers@example.com"); + checkReply( + open_compose_with_reply_to_all, + // To: original To + // Cc: original Cc (auto-Ccs would have been included here already) + // Bcc: auto-bccs + // Reply-To: original Reply-To + { + "addr_to": ["Bart ", + "Maggie "], + "addr_cc": ["Lisa "], + "addr_bcc": [myEmail2, "smithers@example.com"], + "addr_reply": ["Flanders "] + } + ); + stopUsingAutoBcc(identity); } /** @@ -748,6 +849,77 @@ } ); } + +/** + * Tests that addresses get set properly for a reply all to self w/ bccs - + * this should be treated as a followup. + */ +function testReplyToSelfWithBccs() { + let msg0 = create_message({ + from: myEmail, + to: myEmail, + cc: myEmail2 + ", Lisa ", + subject: "testReplyToSelfWithBccs - reply to self", + clobberHeaders: { + "Bcc": "Moe , Barney ", + "Reply-To": myEmail2 + } + }); + add_message_to_folder(folder, msg0); + + be_in_folder(folder); + let msg = select_click_row(i++); + assert_selected_and_displayed(mc, msg); + + ensureNoAutoCc(identity); + checkReply( + open_compose_with_reply_to_all, + // To: original To + // Cc: original Cc + // Bcc: original Bcc + // Reply-To: original Reply-To + { + "addr_to": [myEmail], + "addr_cc": [myEmail2, "Lisa "], + "addr_bcc": ["Moe ", "Barney "], + "addr_reply": [myEmail2] + } + ); +} + +/** + * Tests that addresses get set properly for a reply all to other identity w/ bccs - + * this be treated as a followup. + */ +function testReplyToOtherIdentityWithBccs() { + let msg0 = create_message({ + from: myEmail, + to: myEmail2, + cc: "Lisa ", + subject: "testReplyToOtherIdentityWithBccs - reply to other identity", + clobberHeaders: { + "Bcc": "Moe , Barney " + } + }); + add_message_to_folder(folder, msg0); + + be_in_folder(folder); + let msg = select_click_row(i++); + assert_selected_and_displayed(mc, msg); + + ensureNoAutoCc(identity); + checkReply( + open_compose_with_reply_to_all, + // To: original To + // Cc: original Cc + // Bcc: original Bcc + { + "addr_to": [myEmail2], + "addr_cc": ["Lisa "], + "addr_bcc": ["Moe ", "Barney "] + } + ); +} /** * Tests that addresses get set properly for a nntp reply-all. Binary files /tmp/XSd14i_cHR/thunderbird-24.3.0+build2/mail/themes/osx/mail/icons/flag-col.png and /tmp/Ii3CJpVKXH/thunderbird-24.4.0+build1/mail/themes/osx/mail/icons/flag-col.png differ Binary files /tmp/XSd14i_cHR/thunderbird-24.3.0+build2/mail/themes/osx/mail/icons/threadpane-col@2x.png and /tmp/Ii3CJpVKXH/thunderbird-24.4.0+build1/mail/themes/osx/mail/icons/threadpane-col@2x.png differ Binary files /tmp/XSd14i_cHR/thunderbird-24.3.0+build2/mail/themes/osx/mail/icons/threadpane-col.png and /tmp/Ii3CJpVKXH/thunderbird-24.4.0+build1/mail/themes/osx/mail/icons/threadpane-col.png differ diff -Nru thunderbird-24.3.0+build2/mail/themes/windows/mail/primaryToolbar-aero.css thunderbird-24.4.0+build1/mail/themes/windows/mail/primaryToolbar-aero.css --- thunderbird-24.3.0+build2/mail/themes/windows/mail/primaryToolbar-aero.css 2014-02-10 17:55:29.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/themes/windows/mail/primaryToolbar-aero.css 2014-03-17 23:27:02.000000000 +0000 @@ -15,6 +15,12 @@ /* :::: Toolbar :::: */ +@media not all and (-moz-windows-compositor) { + #mail-toolbar-menubar2:not([autohide="true"]) { + -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag"); + } +} + .mail-toolbox:not(:-moz-lwtheme), #navigation-toolbox:not(:-moz-lwtheme), .contentTabToolbox:not(:-moz-lwtheme) { diff -Nru thunderbird-24.3.0+build2/mail/themes/windows/mail/primaryToolbar.css thunderbird-24.4.0+build1/mail/themes/windows/mail/primaryToolbar.css --- thunderbird-24.3.0+build2/mail/themes/windows/mail/primaryToolbar.css 2014-02-10 17:55:29.000000000 +0000 +++ thunderbird-24.4.0+build1/mail/themes/windows/mail/primaryToolbar.css 2014-03-17 23:27:02.000000000 +0000 @@ -13,6 +13,10 @@ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); +#mail-toolbar-menubar2:not([autohide="true"]) { + -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag"); +} + #navigation-toolbox { -moz-appearance: none; border-top-width: 0; diff -Nru thunderbird-24.3.0+build2/mailnews/base/prefs/content/am-junk.js thunderbird-24.4.0+build1/mailnews/base/prefs/content/am-junk.js --- thunderbird-24.3.0+build2/mailnews/base/prefs/content/am-junk.js 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mailnews/base/prefs/content/am-junk.js 2014-03-17 23:27:02.000000000 +0000 @@ -68,8 +68,9 @@ var wList = document.getElementById("whiteListAbURI"); // Ensure the whitelist is empty - while (wList.lastChild) + while (wList.hasChildNodes()) { wList.removeChild(wList.lastChild); + } // Populate the listbox with address books let abItems = []; @@ -244,8 +245,13 @@ function buildServerFilterMenuList() { const KEY_ISP_DIRECTORY_LIST = "ISPDL"; - let ispHeaderList = document.getElementById('useServerFilterList'); - // Now walk through the isp directories looking for sfd files + let ispHeaderList = document.getElementById("useServerFilterList"); + // Ensure the menulist is empty. + while (ispHeaderList.hasChildNodes()) { + ispHeaderList.removeChild(ispHeaderList.lastChild); + } + + // Now walk through the isp directories looking for sfd files. let ispDirectories = Services.dirsvc.get(KEY_ISP_DIRECTORY_LIST, Components.interfaces.nsISimpleEnumerator); diff -Nru thunderbird-24.3.0+build2/mailnews/base/search/src/nsMsgSearchTerm.cpp thunderbird-24.4.0+build1/mailnews/base/search/src/nsMsgSearchTerm.cpp --- thunderbird-24.3.0+build2/mailnews/base/search/src/nsMsgSearchTerm.cpp 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mailnews/base/search/src/nsMsgSearchTerm.cpp 2014-03-17 23:27:02.000000000 +0000 @@ -197,7 +197,7 @@ } } if (!found) - *string = '\0'; // don't leave the string uninitialized + *string = ""; // don't leave the string uninitialized // we no longer return invalid attribute. If we cannot find the string in the table, // then it is an arbitrary header. Return success regardless if found or not diff -Nru thunderbird-24.3.0+build2/mailnews/base/src/nsMsgDBView.cpp thunderbird-24.4.0+build1/mailnews/base/src/nsMsgDBView.cpp --- thunderbird-24.3.0+build2/mailnews/base/src/nsMsgDBView.cpp 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mailnews/base/src/nsMsgDBView.cpp 2014-03-17 23:27:02.000000000 +0000 @@ -6970,6 +6970,9 @@ MarkThreadRead(thread, threadIndex, idsMarkedRead, true); CollapseByIndex(threadIndex, nullptr); } + + if (!m_db) + return NS_ERROR_FAILURE; return m_db->MarkThreadIgnored(thread, m_keys[threadIndex], ignored, this); } @@ -6979,9 +6982,10 @@ return NS_MSG_INVALID_DBVIEW_INDEX; NoteChange(msgIndex, 1, nsMsgViewNotificationCode::changed); - nsresult rv; - rv = m_db->MarkHeaderKilled(header, ignored, this); + if (!m_db) + return NS_ERROR_FAILURE; + nsresult rv = m_db->MarkHeaderKilled(header, ignored, this); NS_ENSURE_SUCCESS(rv, rv); if (ignored) diff -Nru thunderbird-24.3.0+build2/mailnews/compose/src/nsMsgCompose.cpp thunderbird-24.4.0+build1/mailnews/compose/src/nsMsgCompose.cpp --- thunderbird-24.3.0+build2/mailnews/compose/src/nsMsgCompose.cpp 2014-02-10 17:55:28.000000000 +0000 +++ thunderbird-24.4.0+build1/mailnews/compose/src/nsMsgCompose.cpp 2014-03-17 23:27:02.000000000 +0000 @@ -2600,10 +2600,11 @@ if (curIdentityEmail.Equals(fromEmailAddress)) { isReplyToSelf = true; - // For a true reply-to-self, NONE of your identities are normally in - // To or CC. If you auto-Cc yourself it could be in Cc - but we - // can't detect this case 100%, so lets just treat it like a normal - // reply. + // For a true reply-to-self, none of your identities are normally in + // To or Cc. We need to avoid doing a reply-to-self for people that + // have multiple identities set and sometimes *uses* the other + // identity and sometimes *mails* the other identity. + // E.g. husband+wife or own-email+company-role-mail. for (uint32_t j = 0; j < count; j++) { nsCOMPtr lookupIdentity2; @@ -2614,10 +2615,22 @@ nsCString curIdentityEmail2; lookupIdentity2->GetEmail(curIdentityEmail2); - if (toEmailAddresses.Find(curIdentityEmail2) != kNotFound || - ccEmailAddresses.Find(curIdentityEmail2) != kNotFound) + if (toEmailAddresses.Find(curIdentityEmail2) != kNotFound) { // An identity among the recipients -> not reply-to-self. + // However, "From:me To:me" should be treated as + // reply-to-self if we have a Bcc. If we don't have a Bcc we + // might have the case of a generated mail of the style + // "From:me To:me Reply-To:customer". Then we need to to do a + // normal reply to the customer. + isReplyToSelf = !bcc.IsEmpty(); // true if bcc is set + break; + } + else if (ccEmailAddresses.Find(curIdentityEmail2) != kNotFound) + { + // If you auto-Cc yourself your email would be in Cc - but we + // can't detect why it is in Cc so lets just treat it like a + // normal reply. isReplyToSelf = false; break; } @@ -2656,8 +2669,15 @@ { compFields->SetTo(to); compFields->SetCc(cc); - compFields->SetBcc(bcc); + // In case it's a reply to self, but it's not the actual source of the + // sent message, then we won't know the Bcc header. So set it only if + // it's not empty. If you have auto-bcc and removed the auto-bcc for + // the original mail, you will have to do it manually for this reply + // too. + if (!bcc.IsEmpty()) + compFields->SetBcc(bcc); compFields->SetReplyTo(replyTo); + needToRemoveDup = true; } else if (mailFollowupTo.IsEmpty()) { // default behaviour for messages without Mail-Followup-To @@ -2825,6 +2845,23 @@ addressesToRemoveFromCc, resultStr); if (NS_SUCCEEDED(rv)) _compFields->SetCc(resultStr.get()); + + if (_compFields->GetBcc()) + { + // Remove addresses already in Cc from Bcc. + rv = parser->RemoveDuplicateAddresses(nsDependentCString(_compFields->GetBcc()), + nsDependentCString(_compFields->GetCc()), + resultStr); + if (NS_SUCCEEDED(rv) && !resultStr.IsEmpty()) + { + // Remove addresses already in To from Bcc. + rv = parser->RemoveDuplicateAddresses(resultStr, + nsDependentCString(_compFields->GetTo()), + resultStr); + } + if (NS_SUCCEEDED(rv)) + _compFields->SetBcc(resultStr.get()); + } } } } diff -Nru thunderbird-24.3.0+build2/mozilla/browser/app/blocklist.xml thunderbird-24.4.0+build1/mozilla/browser/app/blocklist.xml --- thunderbird-24.3.0+build2/mozilla/browser/app/blocklist.xml 2014-02-10 18:03:47.000000000 +0000 +++ thunderbird-24.4.0+build1/mozilla/browser/app/blocklist.xml 2014-03-17 23:34:01.000000000 +0000 @@ -1,5 +1,5 @@ - + @@ -89,6 +89,12 @@ + + + + + + @@ -176,8 +182,8 @@ - - + + @@ -378,6 +384,12 @@ + + + + + + @@ -390,6 +402,12 @@ + + + + + + @@ -420,8 +438,8 @@ - - + + @@ -438,11 +456,8 @@ - - - - - + + @@ -529,6 +544,18 @@ + + + + + + + + + + + + @@ -595,8 +622,8 @@ - - + + @@ -619,6 +646,12 @@ + + + + + + @@ -693,6 +726,12 @@ + + + + + + @@ -733,8 +772,14 @@ + + + + + + - + @@ -761,6 +806,20 @@ + + + + + + + + + + + + + + @@ -869,18 +928,24 @@ - + - + + + + + + + @@ -935,7 +1000,7 @@ - + @@ -985,16 +1050,8 @@ - - - - - - - - - - + + @@ -1011,12 +1068,24 @@ + + + + + + + + + + + + @@ -1101,8 +1170,8 @@ - - + + @@ -1143,6 +1212,15 @@ + + + + + + + + + @@ -1206,6 +1284,12 @@ + + + + + + @@ -1290,7 +1374,13 @@ - + + + + + + + @@ -1322,8 +1412,8 @@ - - + + @@ -1346,6 +1436,12 @@ + + + + + + @@ -1358,6 +1454,12 @@ + + + + + + @@ -1403,7 +1505,13 @@ - + + + + + + + @@ -1433,6 +1541,12 @@ + + + + + + @@ -1943,6 +2057,12 @@ + + + + + + diff -Nru thunderbird-24.3.0+build2/mozilla/browser/app/macbuild/Contents/_CodeSignature/CodeResources thunderbird-24.4.0+build1/mozilla/browser/app/macbuild/Contents/_CodeSignature/CodeResources --- thunderbird-24.3.0+build2/mozilla/browser/app/macbuild/Contents/_CodeSignature/CodeResources 2014-02-10 18:03:47.000000000 +0000 +++ thunderbird-24.4.0+build1/mozilla/browser/app/macbuild/Contents/_CodeSignature/CodeResources 2014-03-17 23:34:01.000000000 +0000 @@ -54,6 +54,18 @@ weight 10 + ^Updated.app/.* + omit + + weight + 10 + + ^updating/.* + omit + + weight + 10 + diff -Nru thunderbird-24.3.0+build2/mozilla/config/milestone.txt thunderbird-24.4.0+build1/mozilla/config/milestone.txt --- thunderbird-24.3.0+build2/mozilla/config/milestone.txt 2014-02-10 18:03:47.000000000 +0000 +++ thunderbird-24.4.0+build1/mozilla/config/milestone.txt 2014-03-17 23:34:18.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -24.3.0 +24.4.0 diff -Nru thunderbird-24.3.0+build2/mozilla/content/base/crashtests/308120-1.xul thunderbird-24.4.0+build1/mozilla/content/base/crashtests/308120-1.xul --- thunderbird-24.3.0+build2/mozilla/content/base/crashtests/308120-1.xul 2014-02-10 18:03:04.000000000 +0000 +++ thunderbird-24.4.0+build1/mozilla/content/base/crashtests/308120-1.xul 2014-03-17 23:34:04.000000000 +0000 @@ -1,3 +1,3 @@ - +