mirror of
https://salsa.debian.org/dskoll/remind.git
synced 2026-04-16 22:38:37 +02:00
Compare commits
8 Commits
03.03.12-R
...
03.03.12
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
daf09d9d4e | ||
|
|
511cdb2784 | ||
|
|
a567a9b777 | ||
|
|
05bc3af03d | ||
|
|
7a048d1702 | ||
|
|
8d7f9bcb8b | ||
|
|
9fd8b0f890 | ||
|
|
86873d0725 |
@@ -1,6 +1,11 @@
|
||||
CHANGES TO REMIND
|
||||
|
||||
* VERSION 3.3 Patch 12 - 2022-??-??
|
||||
* VERSION 3.3 Patch 12 - 2022-01-24
|
||||
|
||||
- UPDATE: rem2html: Use JSON::MaybeXS instead of JSON::Any, since JSON::Any
|
||||
is deprecated. NOTE INCOMPATIBILITY: If you don't have JSON::MaybeXS
|
||||
installed, you'll need to install it before trying to install or update
|
||||
rem2html
|
||||
|
||||
- NEW FEATURE: Add a DO command. This is just like INCLUDE, but relative
|
||||
paths are interpreted relative to the directory containing the current
|
||||
@@ -19,6 +24,15 @@ CHANGES TO REMIND
|
||||
- IMPROVEMENT: TkRemind: Store .tkremindrc in $XDG_CONFIG_HOME/tkremindrc
|
||||
or $HOME/.config/tkremindrc as per the XDG Base Directory Specification.
|
||||
|
||||
- BUG FIX: remind: Make the shell() built-in function respect
|
||||
$MaxStringLen
|
||||
|
||||
- BUG FIX: Use size_t to track the size of dynamic buffers rather than int.
|
||||
This permits Remind to read in files with lines longer than 1GB and to
|
||||
consume more than 1GB of output from the shell() command, both of which
|
||||
will surely be massively useful. (The old limit was 1GB rather than 2GB
|
||||
because of details of the dynamic buffer resizing algorithm.)
|
||||
|
||||
* VERSION 3.3 Patch 11 - 2021-12-30
|
||||
|
||||
- IMPROVEMENT: TkRemind: Save the print dialog settings so they persist.
|
||||
|
||||
11
man/remind.1
11
man/remind.1
@@ -2260,7 +2260,9 @@ The maximum number of iterations for the \fBSATISFY\fR clause
|
||||
.TP
|
||||
.B $MaxStringLen
|
||||
A limit on the longest string that \fBRemind\fR will allow you
|
||||
to create. The default is 65535.
|
||||
to create. The default is 65535. If you set \fB$MaxStringLen\fR to 0
|
||||
or to -1, then \fBremind\fR will allow you to create arbitrarily-long
|
||||
strings, at least until it runs out of memory.
|
||||
.TP
|
||||
.B $MinsFromUTC
|
||||
The number of minutes between Universal Time Coordinated and local time. If
|
||||
@@ -3015,8 +3017,8 @@ not be executed.
|
||||
.PP
|
||||
If \fImaxlen\fR is specified, then \fBshell()\fR returns the first
|
||||
\fImaxlen\fR characters of output (rather than the first 511). If
|
||||
\fImaxlen\fR is specified as a negative number, then \fIall\fR the
|
||||
output from \fIcmd\fR is returned.
|
||||
\fImaxlen\fR is specified as a negative number, then it defaults to
|
||||
the value of the system variable \fB$MaxStringLen\fR.
|
||||
.RE
|
||||
.TP
|
||||
.B shellescape(s_str)
|
||||
@@ -3062,7 +3064,8 @@ takes \fIa\fR back to 2009-05-13.
|
||||
.RE
|
||||
.TP
|
||||
.B strlen(s_str)
|
||||
Returns the length of \fIstr\fR.
|
||||
Returns the length of \fIstr\fR. If the length of \fIstr\fR is too large
|
||||
to represent as an integers, emits a "Number too high" error.
|
||||
.TP
|
||||
.B substr(s_str, i_start [,i_end])
|
||||
Returns a \fBSTRING\fR consisting of all characters in \fIstr\fR from
|
||||
|
||||
@@ -7,7 +7,7 @@ bindir=@bindir@
|
||||
datadir=@datadir@
|
||||
datarootdir=@datarootdir@
|
||||
PERL=@PERL@
|
||||
PERLMODS_NEEDED=JSON::Any Getopt::Long
|
||||
PERLMODS_NEEDED=JSON::MaybeXS Getopt::Long
|
||||
all:
|
||||
true
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ use strict;
|
||||
use warnings;
|
||||
|
||||
use Getopt::Long;
|
||||
use JSON::Any;
|
||||
use JSON::MaybeXS;
|
||||
|
||||
my %Options;
|
||||
|
||||
@@ -266,7 +266,7 @@ sub parse_input
|
||||
($y, $m, $d, $special, $tag, $duration, $time, $body) =
|
||||
($1, $2, $3, $4, $5, $6, $7, $8);
|
||||
} elsif (/\{/) {
|
||||
my $obj = JSON::Any->jsonToObj($_);
|
||||
my $obj = decode_json($_);
|
||||
next unless ($obj->{date} =~ /^(\d+)-(\d+)-(\d+)$/);
|
||||
$y = $1;
|
||||
$m = $2;
|
||||
|
||||
@@ -1336,7 +1336,7 @@ static void WriteCalTrailer(void)
|
||||
/***************************************************************/
|
||||
static int DoCalRem(ParsePtr p, int col)
|
||||
{
|
||||
int oldLen;
|
||||
size_t oldLen;
|
||||
Trigger trig;
|
||||
TimeTrig tim;
|
||||
Value v;
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
Doubles the size of dynamic buffer until it has room for at least
|
||||
'n' characters, not including trailing '\0'
|
||||
**********************************************************************/
|
||||
static int DBufMakeRoom(DynamicBuffer *dbuf, int n)
|
||||
static int DBufMakeRoom(DynamicBuffer *dbuf, size_t n)
|
||||
{
|
||||
/* Double size until it's greater than n (strictly > to leave room
|
||||
for trailing '\0' */
|
||||
int size = dbuf->allocatedLen;
|
||||
size_t size = dbuf->allocatedLen;
|
||||
char *buf;
|
||||
|
||||
if (size > n) return OK;
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
#define DBUF_STATIC_SIZE 128
|
||||
typedef struct {
|
||||
char *buffer;
|
||||
int len;
|
||||
int allocatedLen;
|
||||
size_t len;
|
||||
size_t allocatedLen;
|
||||
char staticBuf[DBUF_STATIC_SIZE];
|
||||
} DynamicBuffer;
|
||||
|
||||
|
||||
@@ -828,7 +828,7 @@ static int Add(void)
|
||||
v3.type = STR_TYPE;
|
||||
l1 = strlen(v1.v.str);
|
||||
l2 = strlen(v2.v.str);
|
||||
if (MaxStringLen && (l1 + l2 > (size_t) MaxStringLen)) {
|
||||
if (MaxStringLen > 0 && (l1 + l2 > (size_t) MaxStringLen)) {
|
||||
DestroyValue(v1); DestroyValue(v2);
|
||||
return E_STRING_TOO_LONG;
|
||||
}
|
||||
|
||||
15
src/funcs.c
15
src/funcs.c
@@ -433,7 +433,9 @@ static int FStrlen(func_info *info)
|
||||
Value *v = &ARG(0);
|
||||
if (v->type != STR_TYPE) return E_BAD_TYPE;
|
||||
RetVal.type = INT_TYPE;
|
||||
RETVAL = strlen(v->v.str);
|
||||
size_t l = strlen(v->v.str);
|
||||
if (l > INT_MAX) return E_2HIGH;
|
||||
RETVAL = (int) l;
|
||||
return OK;
|
||||
}
|
||||
|
||||
@@ -1572,6 +1574,15 @@ static int FShell(func_info *info)
|
||||
ASSERT_TYPE(1, INT_TYPE);
|
||||
maxlen = ARGV(1);
|
||||
}
|
||||
|
||||
/* Don't allow maxlen to exceed the maximum length of
|
||||
a string variable */
|
||||
if (MaxStringLen > 0) {
|
||||
if (maxlen <= 0 || maxlen > MaxStringLen) {
|
||||
maxlen = MaxStringLen;
|
||||
}
|
||||
}
|
||||
|
||||
fp = popen(ARGSTR(0), "r");
|
||||
if (!fp) return E_IO_ERR;
|
||||
while (1) {
|
||||
@@ -1585,7 +1596,7 @@ static int FShell(func_info *info)
|
||||
DBufFree(&buf);
|
||||
return E_NO_MEM;
|
||||
}
|
||||
if (maxlen > 0 && DBufLen(&buf) >= maxlen) {
|
||||
if (maxlen > 0 && DBufLen(&buf) >= (size_t) maxlen) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user