summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Schoenert <c.schoenert@t-online.de>2019-06-12 16:23:09 +0200
committerCarsten Schoenert <c.schoenert@t-online.de>2019-06-12 16:23:09 +0200
commitf791deea290f3512601901fccc9ca8160fd85cd5 (patch)
treee18d0b8cb08fdbbbc7086601c76c70a656440a3c
parentf6dd130b8be04b7a49d04920386bef9da321ab72 (diff)
New upstream version 60.7.1upstream/60.7.1upstream-60.x
-rw-r--r--comm/calendar/base/content/calendar-month-view.xml13
-rw-r--r--comm/calendar/base/content/calendar-multiday-view.xml9
-rw-r--r--comm/calendar/base/content/widgets/minimonth.xml9
-rw-r--r--comm/calendar/libical/src/libical/icalparser.c115
-rw-r--r--comm/calendar/libical/src/libical/icalrecur.c11
-rw-r--r--comm/calendar/libical/src/libical/icalvalue.c135
-rw-r--r--comm/comm-extra-nss.symbols1
-rw-r--r--comm/mail/config/version.txt2
-rw-r--r--comm/mail/config/version_display.txt2
-rw-r--r--comm/mailnews/extensions/smime/src/nsMsgComposeSecure.cpp9
-rw-r--r--comm/mailnews/local/src/nsMsgMaildirStore.cpp4
-rw-r--r--comm/suite/locales/en-US/profile/bookmarks.inc6
12 files changed, 216 insertions, 100 deletions
diff --git a/comm/calendar/base/content/calendar-month-view.xml b/comm/calendar/base/content/calendar-month-view.xml
index 482f092..cd41d92 100644
--- a/comm/calendar/base/content/calendar-month-view.xml
+++ b/comm/calendar/base/content/calendar-month-view.xml
@@ -981,6 +981,15 @@
return boxes;
}
+ if (targetDate.compare(this.mStartDate) < 0) {
+ targetDate = this.mStartDate.clone();
+ }
+
+ if (finishDate.compare(this.mEndDate) > 0) {
+ finishDate = this.mEndDate.clone();
+ finishDate.day++;
+ }
+
if (!targetDate.isDate) {
// Reset the time to 00:00, so that we really get all the boxes
targetDate.hour = 0;
@@ -1075,6 +1084,10 @@
<parameter name="aAlarmItem"/>
<parameter name="aStop"/>
<body><![CDATA[
+ if (!this.initialized) {
+ return;
+ }
+
let showIndicator = Preferences.get("calendar.alarms.indicator.show", true);
let totaltime = Preferences.get("calendar.alarms.indicator.totaltime", 3600);
diff --git a/comm/calendar/base/content/calendar-multiday-view.xml b/comm/calendar/base/content/calendar-multiday-view.xml
index b8a6d70..c791fe6 100644
--- a/comm/calendar/base/content/calendar-multiday-view.xml
+++ b/comm/calendar/base/content/calendar-multiday-view.xml
@@ -3557,6 +3557,15 @@
let finishDate = (aItem.endDate || aItem.dueDate || aItem.entryDate || startDate)
.getInTimezone(timezone);
+ if (targetDate.compare(this.mStartDate) < 0) {
+ targetDate = this.mStartDate.clone();
+ }
+
+ if (finishDate.compare(this.mEndDate) > 0) {
+ finishDate = this.mEndDate.clone();
+ finishDate.day++;
+ }
+
if (!targetDate.isDate) {
// Set the time to 00:00 so that we get all the boxes
targetDate.hour = 0;
diff --git a/comm/calendar/base/content/widgets/minimonth.xml b/comm/calendar/base/content/widgets/minimonth.xml
index d6ccf9b..50fd37c 100644
--- a/comm/calendar/base/content/widgets/minimonth.xml
+++ b/comm/calendar/base/content/widgets/minimonth.xml
@@ -584,6 +584,15 @@
return;
}
+ if (start.compare(this.firstDate) < 0) {
+ start = this.firstDate.clone();
+ }
+
+ if (end.compare(this.lastDate) > 0) {
+ end = this.lastDate.clone();
+ end.day++;
+ }
+
// We need to compare with midnight of the current day, so reset the
// time here.
let current = start.clone().getInTimezone(cal.dtz.defaultTimezone);
diff --git a/comm/calendar/libical/src/libical/icalparser.c b/comm/calendar/libical/src/libical/icalparser.c
index 1a5e400..8d44787 100644
--- a/comm/calendar/libical/src/libical/icalparser.c
+++ b/comm/calendar/libical/src/libical/icalparser.c
@@ -190,25 +190,24 @@ static
char* parser_get_next_char(char c, char *str, int qm)
{
int quote_mode = 0;
- char* p;
-
- for(p=str; *p!=0; p++){
- if (qm == 1) {
- if ( quote_mode == 0 && *p=='"' && *(p-1) != '\\' ){
- quote_mode =1;
- continue;
- }
-
- if ( quote_mode == 1 && *p=='"' && *(p-1) != '\\' ){
- quote_mode =0;
- continue;
- }
- }
-
- if (quote_mode == 0 && *p== c && *(p-1) != '\\' ){
- return p;
- }
+ char *p = str;
+ char next_char = *p;
+ char prev_char = 0;
+
+ while (next_char != '\0') {
+ if (prev_char != '\\') {
+ if (qm == 1 && next_char == '"') {
+ /* Encountered a quote, toggle quote mode */
+ quote_mode = !quote_mode;
+ } else if (quote_mode == 0 && next_char == c) {
+ /* Found a matching character out of quote mode, return it */
+ return p;
+ }
+ }
+ /* Save the previous character so we can check if it's a backslash in the next iteration */
+ prev_char = next_char;
+ next_char = *(++p);
}
return 0;
@@ -382,10 +381,9 @@ char* parser_get_next_value(char* line, char **end, icalvalue_kind kind)
/* If the comma is preceded by a '\', then it is a literal and
not a value separator*/
- if ( (next!=0 && *(next-1) == '\\') ||
- (next!=0 && *(next-3) == '\\')
- )
- /*second clause for '/' is on prev line. HACK may be out of bounds */
+ if ((next!=0 && *(next-1) == '\\') ||
+ (next!=0 && (next-3) >= line && *(next-3) == '\\' && *(next-2) == '\r' && *(next-1) == '\n'))
+ /* second clause for '\' is on prev line */
{
p = next+1;
} else {
@@ -970,6 +968,12 @@ icalcomponent* icalparser_add_line(icalparser* parser,
/* If it is a VALUE parameter, set the kind of value*/
if (icalparameter_isa(param)==ICAL_VALUE_PARAMETER){
+ const char unknown_type[] =
+ "Got a VALUE parameter with an unknown type";
+ const char illegal_type[] =
+ "Got a VALUE parameter with an illegal type for property";
+ const char *value_err = NULL;
+
value_kind = (icalvalue_kind)
icalparameter_value_to_value_kind(
@@ -981,10 +985,69 @@ icalcomponent* icalparser_add_line(icalparser* parser,
/* Ooops, could not parse the value of the
parameter ( it was not one of the defined
values ), so reset the value_kind */
-
- insert_error(
- tail, str,
- "Got a VALUE parameter with an unknown type",
+
+ value_err = unknown_type;
+ }
+ else if (value_kind !=
+ icalproperty_kind_to_value_kind(icalproperty_isa(prop))) {
+ /* VALUE parameter type does not match default type
+ for this property (check for allowed alternate types) */
+
+ switch (prop_kind) {
+ case ICAL_ATTACH_PROPERTY:
+ // case ICAL_IMAGE_PROPERTY:
+ /* Accept BINARY */
+ if (value_kind != ICAL_BINARY_VALUE)
+ value_err = illegal_type;
+ break;
+
+ case ICAL_DTEND_PROPERTY:
+ case ICAL_DUE_PROPERTY:
+ case ICAL_DTSTART_PROPERTY:
+ case ICAL_EXDATE_PROPERTY:
+ case ICAL_RECURRENCEID_PROPERTY:
+ /* Accept DATE */
+ if (value_kind != ICAL_DATE_VALUE)
+ value_err = illegal_type;
+ break;
+
+ case ICAL_GEO_PROPERTY:
+ /* Accept FLOAT (but change to GEO) */
+ if (value_kind != ICAL_FLOAT_VALUE)
+ value_err = illegal_type;
+ else value_kind = ICAL_GEO_VALUE;
+ break;
+
+ case ICAL_RDATE_PROPERTY:
+ /* Accept DATE-TIME, DATE or PERIOD */
+ if (value_kind != ICAL_DATETIME_VALUE &&
+ value_kind != ICAL_DATE_VALUE &&
+ value_kind != ICAL_PERIOD_VALUE)
+ value_err = illegal_type;
+ break;
+
+ case ICAL_TRIGGER_PROPERTY:
+ /* Accept DATE-TIME */
+ if (value_kind != ICAL_DATETIME_VALUE)
+ value_err = illegal_type;
+ break;
+
+ case ICAL_X_PROPERTY:
+ /* Accept ANY value type */
+ break;
+
+ default:
+ /* ONLY default type is allowed */
+ value_err = illegal_type;
+ break;
+ }
+ }
+
+ if (value_err != NULL) {
+ /* Ooops, unknown/illegal VALUE parameter,
+ so reset the value_kind */
+
+ insert_error(tail, str, value_err,
ICAL_XLICERRORTYPE_PARAMETERVALUEPARSEERROR);
value_kind =
diff --git a/comm/calendar/libical/src/libical/icalrecur.c b/comm/calendar/libical/src/libical/icalrecur.c
index 299ac70..7faf234 100644
--- a/comm/calendar/libical/src/libical/icalrecur.c
+++ b/comm/calendar/libical/src/libical/icalrecur.c
@@ -404,10 +404,15 @@ void icalrecur_add_bydayrules(struct icalrecur_parser *parser, const char* vals)
wd = icalrecur_string_to_weekday(t);
- if (wd != ICAL_NO_WEEKDAY) {
- array[i++] = (short) (sign * (wd + 8 * weekno));
- array[i] = ICAL_RECURRENCE_ARRAY_MAX;
+ /* Sanity check value */
+ if (wd == ICAL_NO_WEEKDAY || weekno >= ICAL_BY_WEEKNO_SIZE) {
+ free(vals_copy);
+ return;
}
+
+ int position = sign * weekno;
+ array[i++] = (wd + (8 * abs(position))) * ((position < 0) ? -1 : 1);
+ array[i] = ICAL_RECURRENCE_ARRAY_MAX;
}
free(vals_copy);
diff --git a/comm/calendar/libical/src/libical/icalvalue.c b/comm/calendar/libical/src/libical/icalvalue.c
index b79841f..4ece8b7 100644
--- a/comm/calendar/libical/src/libical/icalvalue.c
+++ b/comm/calendar/libical/src/libical/icalvalue.c
@@ -189,77 +189,80 @@ icalvalue* icalvalue_new_clone(const icalvalue* old) {
static char* icalmemory_strdup_and_dequote(const char* str)
{
- const char* p;
- char* out = (char*)malloc(sizeof(char) * strlen(str) +1);
- char* pout;
+ const char *p;
+ char *out = (char *)malloc(sizeof(char) * strlen(str) + 1);
+ char *pout;
+ int wroteNull = 0;
- if (out == 0){
- return 0;
+ if (out == 0) {
+ return 0;
}
pout = out;
- for (p = str; *p!=0; p++){
-
- if( *p == '\\')
- {
- p++;
- switch(*p){
- case 0:
- {
- *pout = '\0';
- break;
-
- }
- case 'n':
- case 'N':
- {
- *pout = '\n';
- break;
- }
- case 't':
- case 'T':
- {
- *pout = '\t';
- break;
- }
- case 'r':
- case 'R':
- {
- *pout = '\r';
- break;
- }
- case 'b':
- case 'B':
- {
- *pout = '\b';
- break;
- }
- case 'f':
- case 'F':
- {
- *pout = '\f';
- break;
- }
- case ';':
- case ',':
- case '"':
- case '\\':
- {
- *pout = *p;
- break;
- }
- default:
- {
- *pout = ' ';
- }
- }
- } else {
- *pout = *p;
- }
+ /* Stop the loop when encountering a terminator in the source string
+ or if a null has been written to the destination. This prevents
+ reading past the end of the source string if the last character
+ is a backslash. */
+ for (p = str; !wroteNull && *p != 0; p++) {
+
+ if (*p == '\\') {
+ p++;
+ switch (*p) {
+ case 0:
+ {
+ wroteNull = 1; //stops iteration so p isn't incremented past the end of str
+ *pout = '\0';
+ break;
+ }
+ case 'n':
+ case 'N':
+ {
+ *pout = '\n';
+ break;
+ }
+ case 't':
+ case 'T':
+ {
+ *pout = '\t';
+ break;
+ }
+ case 'r':
+ case 'R':
+ {
+ *pout = '\r';
+ break;
+ }
+ case 'b':
+ case 'B':
+ {
+ *pout = '\b';
+ break;
+ }
+ case 'f':
+ case 'F':
+ {
+ *pout = '\f';
+ break;
+ }
+ case ';':
+ case ',':
+ case '"':
+ case '\\':
+ {
+ *pout = *p;
+ break;
+ }
+ default:
+ {
+ *pout = ' ';
+ }
+ }
+ } else {
+ *pout = *p;
+ }
- pout++;
-
+ pout++;
}
*pout = '\0';
@@ -267,6 +270,8 @@ static char* icalmemory_strdup_and_dequote(const char* str)
return out;
}
+
+
/*
* Returns a quoted copy of a string
*/
diff --git a/comm/comm-extra-nss.symbols b/comm/comm-extra-nss.symbols
index 964443c..b09fb87 100644
--- a/comm/comm-extra-nss.symbols
+++ b/comm/comm-extra-nss.symbols
@@ -1,2 +1,3 @@
+CERT_GetCertNicknames
NSS_CMSSignedData_GetDigestAlgs
NSS_CMSSignedData_HasDigests
diff --git a/comm/mail/config/version.txt b/comm/mail/config/version.txt
index 6ff5102..b62a88f 100644
--- a/comm/mail/config/version.txt
+++ b/comm/mail/config/version.txt
@@ -1 +1 @@
-60.7.0
+60.7.1
diff --git a/comm/mail/config/version_display.txt b/comm/mail/config/version_display.txt
index 6ff5102..b62a88f 100644
--- a/comm/mail/config/version_display.txt
+++ b/comm/mail/config/version_display.txt
@@ -1 +1 @@
-60.7.0
+60.7.1
diff --git a/comm/mailnews/extensions/smime/src/nsMsgComposeSecure.cpp b/comm/mailnews/extensions/smime/src/nsMsgComposeSecure.cpp
index 2527df4..ea4f918 100644
--- a/comm/mailnews/extensions/smime/src/nsMsgComposeSecure.cpp
+++ b/comm/mailnews/extensions/smime/src/nsMsgComposeSecure.cpp
@@ -28,6 +28,7 @@
#include "nspr.h"
#include "pkix/Result.h"
#include "nsNSSCertificate.h"
+#include "nsNSSHelper.h"
using namespace mozilla::mailnews;
using namespace mozilla;
@@ -888,6 +889,14 @@ nsresult nsMsgComposeSecure::MimeCryptoHackCerts(const char *aRecipients,
RefPtr<SharedCertVerifier> certVerifier(GetDefaultCertVerifier());
NS_ENSURE_TRUE(certVerifier, NS_ERROR_UNEXPECTED);
+ // Calling CERT_GetCertNicknames has the desired side effect of
+ // traversing all tokens, and bringing up prompts to unlock them.
+ nsCOMPtr<nsIInterfaceRequestor> ctx = new PipUIContext();
+ CERTCertNicknames *result_unused =
+ CERT_GetCertNicknames(CERT_GetDefaultCertDB(),
+ SEC_CERT_NICKNAMES_USER, ctx);
+ CERT_FreeNicknames(result_unused);
+
UniqueCERTCertList builtChain;
if (!mEncryptionCertDBKey.IsEmpty()) {
res = certdb->FindCertByDBKey(mEncryptionCertDBKey,
diff --git a/comm/mailnews/local/src/nsMsgMaildirStore.cpp b/comm/mailnews/local/src/nsMsgMaildirStore.cpp
index 13ec1a3..abf476f 100644
--- a/comm/mailnews/local/src/nsMsgMaildirStore.cpp
+++ b/comm/mailnews/local/src/nsMsgMaildirStore.cpp
@@ -1239,8 +1239,8 @@ void MaildirStoreParser::TimerCallback(nsITimer *aTimer, void *aClosure)
nsCOMPtr<nsIMsgPluggableStore> store;
parser->m_folder->GetMsgStore(getter_AddRefs(store));
parser->m_timer->Cancel();
- parser->m_db->SetSummaryValid(true);
-// store->SetSummaryFileValid(parser->m_folder, parser->m_db, true);
+ if (parser->m_db) parser->m_db->SetSummaryValid(true);
+ // store->SetSummaryFileValid(parser->m_folder, parser->m_db, true);
if (parser->m_listener)
{
nsresult rv;
diff --git a/comm/suite/locales/en-US/profile/bookmarks.inc b/comm/suite/locales/en-US/profile/bookmarks.inc
index 85b67ef..2d473ad 100644
--- a/comm/suite/locales/en-US/profile/bookmarks.inc
+++ b/comm/suite/locales/en-US/profile/bookmarks.inc
@@ -65,11 +65,13 @@
# LOCALIZATION NOTE (seamonkey_l10n):
# insert full bookmark line for localized SeaMonkey page (personal toolbar)
# e.g. #define seamonkey_l10n <DT><A HREF="https://www.seamonkey.tlh/">SeaMonkey tlhIngan</a>
-#define seamonkey_l10n
+# Do not remove the trailing spaces here or MERGE_FILE in l0n builds will fail!
+#define seamonkey_l10n
# LOCALIZATION NOTE (seamonkey_l10n_long):
# insert full bookmark line for localized SeaMonkey page (normal bookmark)
# e.g. #define seamonkey_l10n_long <DT><A HREF="https://www.seamonkey.tld/">tlhIngan Hol SeaMonkey</a>
-#define seamonkey_l10n_long
+# Do not remove the trailing spaces here or or MERGE_FILE in l0n builds will fail!
+#define seamonkey_l10n_long
#unfilter emptyLines