Merge branch 'obsd-master'

This commit is contained in:
Thomas Adam
2016-01-31 12:01:09 +00:00
6 changed files with 75 additions and 13 deletions

View File

@ -701,7 +701,7 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
char *copy, *copy0, *endptr, *ptr, *found, *new, *value;
char *from = NULL, *to = NULL;
size_t valuelen, newlen, fromlen, tolen, used;
u_long limit = 0;
long limit = 0;
int modifiers = 0, brackets;
/* Make a copy of the key. */
@ -713,8 +713,8 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
switch (copy[0]) {
case '=':
errno = 0;
limit = strtoul(copy + 1, &endptr, 10);
if (errno == ERANGE && limit == ULONG_MAX)
limit = strtol(copy + 1, &endptr, 10);
if (errno == ERANGE && (limit == LONG_MIN || limit == LONG_MAX))
break;
if (*endptr != ':')
break;
@ -830,10 +830,14 @@ format_replace(struct format_tree *ft, const char *key, size_t keylen,
}
/* Truncate the value if needed. */
if (limit != 0) {
if (limit > 0) {
new = utf8_trimcstr(value, limit);
free(value);
value = new;
} else if (limit < 0) {
new = utf8_rtrimcstr(value, -limit);
free(value);
value = new;
}
/* Expand the buffer and copy in the value. */