mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 14:28:40 +02:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
23081b556f | ||
|
|
e2cfa46289 | ||
|
|
71384da875 | ||
|
|
af69f8779d | ||
|
|
131e77fa18 | ||
|
|
f153acf7ce |
18
configure
vendored
18
configure
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.72 for remind 06.01.01.
|
||||
# Generated by GNU Autoconf 2.72 for remind 06.01.02.
|
||||
#
|
||||
#
|
||||
# Copyright (C) 1992-1996, 1998-2017, 2020-2023 Free Software Foundation,
|
||||
@@ -601,8 +601,8 @@ MAKEFLAGS=
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='remind'
|
||||
PACKAGE_TARNAME='remind'
|
||||
PACKAGE_VERSION='06.01.01'
|
||||
PACKAGE_STRING='remind 06.01.01'
|
||||
PACKAGE_VERSION='06.01.02'
|
||||
PACKAGE_STRING='remind 06.01.02'
|
||||
PACKAGE_BUGREPORT=''
|
||||
PACKAGE_URL='https://dianne.skoll.ca/projects/remind/'
|
||||
|
||||
@@ -1258,7 +1258,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
'configure' configures remind 06.01.01 to adapt to many kinds of systems.
|
||||
'configure' configures remind 06.01.02 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1320,7 +1320,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of remind 06.01.01:";;
|
||||
short | recursive ) echo "Configuration of remind 06.01.02:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1408,7 +1408,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
remind configure 06.01.01
|
||||
remind configure 06.01.02
|
||||
generated by GNU Autoconf 2.72
|
||||
|
||||
Copyright (C) 2023 Free Software Foundation, Inc.
|
||||
@@ -1871,7 +1871,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by remind $as_me 06.01.01, which was
|
||||
It was created by remind $as_me 06.01.02, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
$ $0$ac_configure_args_raw
|
||||
@@ -4848,7 +4848,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by remind $as_me 06.01.01, which was
|
||||
This file was extended by remind $as_me 06.01.02, which was
|
||||
generated by GNU Autoconf 2.72. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -4913,7 +4913,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config='$ac_cs_config_escaped'
|
||||
ac_cs_version="\\
|
||||
remind config.status 06.01.01
|
||||
remind config.status 06.01.02
|
||||
configured by $0, generated by GNU Autoconf 2.72,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT(remind, 06.01.01, , , https://dianne.skoll.ca/projects/remind/)
|
||||
AC_INIT(remind, 06.01.02, , , https://dianne.skoll.ca/projects/remind/)
|
||||
AC_CONFIG_SRCDIR([src/queue.c])
|
||||
|
||||
cat <<'EOF'
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
CHANGES TO REMIND
|
||||
|
||||
* VERSION 6.1 Patch 2 - 2025-09-19
|
||||
|
||||
- BUG FIX: remind: A reminder on a specific fixed date and time that
|
||||
uses the TZ feature could erroneously issue a "Can't compute trigger"
|
||||
error. This has been fixed.
|
||||
|
||||
- CHANGE: remind: The default for --max-expr-complexity is 10,000,000
|
||||
(ten million) instead of unlimited. This should not affect any
|
||||
real-world Remind scripts.
|
||||
|
||||
* VERSION 6.1 Patch 1 - 2025-09-12
|
||||
|
||||
- NEW FEATURE: remind: Add the new --max-expr-complexity=n
|
||||
|
||||
@@ -620,10 +620,10 @@ queued reminders, the time limit is reset to no limit.
|
||||
Limit the total complexity of expression valuation for a given line in a script
|
||||
to \fIn\fR nodes. Roughly speaking, each function call, operator, constant,
|
||||
variable reference, etc corresponds to one expression node. By default,
|
||||
there's no limit to how many nodes can be evaluated per line, but if you
|
||||
set this to a high number like 1000000 (one million) or so, you are unlikely
|
||||
to cause problems with any real-world scripts while preventing pathological
|
||||
behavior from badly-written or malicious expressions.
|
||||
the limit is set to 10000000 (ten million). You can explicitly set it
|
||||
to zero if you don't want any limit to apply. The default limit of ten
|
||||
million should never be triggered by any sensible Remind script, however,
|
||||
and we don't recommend changing the limit.
|
||||
.TP
|
||||
.B \-\-test
|
||||
The \fB\-\-test\fR long option is only for use by the acceptance tests
|
||||
|
||||
@@ -88,10 +88,10 @@ EXTERN INIT( int DeltaOverride, 0);
|
||||
EXTERN INIT( int RunDisabled, 0);
|
||||
EXTERN INIT( int ExpressionEvaluationDisabled, 0);
|
||||
EXTERN INIT( int ExpressionEvaluationTimeLimit, 0);
|
||||
EXTERN INIT( int ExpressionNodesEvaluated, 0);
|
||||
EXTERN INIT( int MaxExprNodesPerLine, 0);
|
||||
EXTERN INIT( int ExpressionNodesEvaluatedThisLine, 0);
|
||||
EXTERN INIT( int ExpressionNodeLimitPerLine, 0);
|
||||
EXTERN INIT( unsigned long ExpressionNodesEvaluated, 0);
|
||||
EXTERN INIT( unsigned long MaxExprNodesPerLine, 0);
|
||||
EXTERN INIT( unsigned long ExpressionNodesEvaluatedThisLine, 0);
|
||||
EXTERN INIT( unsigned long ExpressionNodeLimitPerLine, 10000000);
|
||||
EXTERN INIT( volatile sig_atomic_t ExpressionTimeLimitExceeded, 0);
|
||||
EXTERN INIT( int IgnoreOnce, 0);
|
||||
EXTERN INIT( char const *OnceFile, NULL);
|
||||
|
||||
10
src/init.c
10
src/init.c
@@ -1154,6 +1154,8 @@ static void
|
||||
ProcessLongOption(char const *arg)
|
||||
{
|
||||
int t;
|
||||
unsigned long tt;
|
||||
|
||||
if (!strcmp(arg, "test")) {
|
||||
fprintf(stderr, "Enabling test mode: This is meant for the acceptance test.\nDo not use --test in production.\nIn test mode, the system time is fixed at 2025-01-06@19:00\n");
|
||||
TestMode = 1;
|
||||
@@ -1222,12 +1224,8 @@ ProcessLongOption(char const *arg)
|
||||
print_sysvar_tokens();
|
||||
exit(0);
|
||||
}
|
||||
if (sscanf(arg, "max-expr-complexity=%d", &t) == 1) {
|
||||
if (t < 0) {
|
||||
fprintf(ErrFp, "%s: --max-expr-complexity must be non-negative\n", ArgV[0]);
|
||||
return;
|
||||
}
|
||||
ExpressionNodeLimitPerLine = t;
|
||||
if (sscanf(arg, "max-expr-complexity=%lu", &tt) == 1) {
|
||||
ExpressionNodeLimitPerLine = tt;
|
||||
return;
|
||||
}
|
||||
if (sscanf(arg, "max-execution-time=%d", &t) == 1) {
|
||||
|
||||
@@ -84,8 +84,8 @@ exitfunc(void)
|
||||
|
||||
UnsetAllUserFuncs();
|
||||
print_expr_nodes_stats();
|
||||
fprintf(ErrFp, "Max expr node evaluations per line: %d\n", MaxExprNodesPerLine);
|
||||
fprintf(ErrFp, "Total expression node evaluations: %d\n", ExpressionNodesEvaluated);
|
||||
fprintf(ErrFp, "Max expr node evaluations per line: %lu\n", MaxExprNodesPerLine);
|
||||
fprintf(ErrFp, "Total expression node evaluations: %lu\n", ExpressionNodesEvaluated);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -554,6 +554,7 @@ int ComputeTriggerNoAdjustDuration(int today, Trigger *trig, TimeTrig const *tim
|
||||
y, m, d, omit,
|
||||
result;
|
||||
|
||||
int save_nextstart = 0;
|
||||
trig->expired = 0;
|
||||
if (save_in_globals) {
|
||||
LastTrigValid = 0;
|
||||
@@ -617,14 +618,24 @@ int ComputeTriggerNoAdjustDuration(int today, Trigger *trig, TimeTrig const *tim
|
||||
|
||||
/** FIXME: If a timed reminder moves to yesterday because of a time
|
||||
zone adjustment, try again! */
|
||||
|
||||
if (trig->tz) {
|
||||
TimeTrig copy = *tim;
|
||||
int new_result;
|
||||
ExitTimezone(trig->tz);
|
||||
new_result = AdjustTriggerForTimeZone(trig, result, ©);
|
||||
EnterTimezone(trig->tz);
|
||||
if (new_result + duration_days < today) {
|
||||
if (result + duration_days >= today &&
|
||||
new_result + duration_days < today) {
|
||||
/* If we are not making progress, then give up: It's expired */
|
||||
if (nextstart <= save_nextstart) {
|
||||
trig->expired = 1;
|
||||
if (DebugFlag & DB_PRTTRIG) {
|
||||
fprintf(ErrFp, "%s(%s): %s\n",
|
||||
GetCurrentFilename(), line_range(LineNoStart, LineNo), GetErr(E_EXPIRED));
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
save_nextstart = nextstart;
|
||||
nextstart = start+1;
|
||||
start = nextstart;
|
||||
continue;
|
||||
|
||||
@@ -161,6 +161,9 @@ debug -t
|
||||
|
||||
EOF
|
||||
|
||||
TZ=America/Toronto $REMIND -s - 2025-09-01@00:00 <<'EOF' >> $OUT 2>&1
|
||||
REM 2025-09-24 AT 09:00 TZ America/Denver MSG Dr. Smith
|
||||
EOF
|
||||
cmp -s $OUT $CMP
|
||||
if [ "$?" = "0" ] ; then
|
||||
echo "Remind: Time zone test PASSED"
|
||||
|
||||
@@ -1045,7 +1045,7 @@ set a057 value("a05"+"6")
|
||||
"a05" + "6" => "a056"
|
||||
value("a056") => "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
set a058 version()
|
||||
version() => "06.01.01"
|
||||
version() => "06.01.02"
|
||||
set a059 wkday(today())
|
||||
today() => 1991-02-16
|
||||
wkday(1991-02-16) => "Saturday"
|
||||
@@ -2608,7 +2608,7 @@ a056 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
a007 "1991-02-16"
|
||||
a057 "SDFJHSDF KSJDFH KJSDFH KSJDFH"
|
||||
a008 "11:44"
|
||||
a058 "06.01.01"
|
||||
a058 "06.01.02"
|
||||
a059 "Saturday"
|
||||
a010 12
|
||||
a060 6
|
||||
@@ -5561,8 +5561,8 @@ REM SATISFY ""
|
||||
REM SATISFY [version() > "01.00.00"]
|
||||
../tests/test.rem(1074): SATISFY: expression has no reference to trigdate() or $T...
|
||||
../tests/test.rem(1074): Trig = Saturday, 16 February, 1991
|
||||
version() => "06.01.01"
|
||||
"06.01.01" > "01.00.00" => 1
|
||||
version() => "06.01.02"
|
||||
"06.01.02" > "01.00.00" => 1
|
||||
../tests/test.rem(1074): Trig(satisfied) = Saturday, 16 February, 1991
|
||||
REM SATISFY [max(x, max(x, 1, 2, 3), 4, 5, 6) * 5]
|
||||
../tests/test.rem(1075): SATISFY: expression has no reference to trigdate() or $T...
|
||||
@@ -23715,7 +23715,7 @@ SECURITY: Won't read world-writable file or directory!
|
||||
Error reading include_dir/ww: Can't open file
|
||||
SECURITY: Won't read world-writable file or directory!
|
||||
Error reading include_dir/ww: No files matching *.rem
|
||||
06.01.01
|
||||
06.01.02
|
||||
Enabling test mode: This is meant for the acceptance test.
|
||||
Do not use --test in production.
|
||||
In test mode, the system time is fixed at 2025-01-06@19:00
|
||||
|
||||
@@ -78,3 +78,4 @@ trig("Mon at 00:00 TZ Australia/Sydney", "Tue at 00:00 TZ America/Toronto", "Wed
|
||||
-stdin-(14:21): Trig(tz_adj Australia/Sydney) = Saturday, 6 September, 2025 AT 10:00
|
||||
-stdin-(14:21): Trig = Monday, 1 September, 2025 AT 14:42
|
||||
2025-09-01
|
||||
2025/09/24 * * * 660 11:00am Dr. Smith
|
||||
|
||||
Reference in New Issue
Block a user