summaryrefslogtreecommitdiff
path: root/ext/date
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2016-09-30 20:49:58 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2019-08-12 20:41:11 +0900
commit3fc10eff1e6dd63bc0daa753108072954adc89ac (patch)
treedea07c416db4a8cb4b5eb6cf8e56ef84caca0109 /ext/date
parentd96feee37c2d109d0103f08985e85641a23108bf (diff)
date_parse.c: trim off
* ext/date/date_parse.c (date_zone_to_diff): trim off by zone name length.
Diffstat (limited to 'ext/date')
-rw-r--r--ext/date/date_parse.c4
-rw-r--r--ext/date/prereq.mk2
-rw-r--r--ext/date/zonetab.h17
3 files changed, 10 insertions, 13 deletions
diff --git a/ext/date/date_parse.c b/ext/date/date_parse.c
index 8717850eba..519f29cbcb 100644
--- a/ext/date/date_parse.c
+++ b/ext/date/date_parse.c
@@ -438,13 +438,13 @@ date_zone_to_diff(VALUE str)
}
{
long sl = shrunk_size(s, l);
- if (sl) {
+ if (sl > 0 && sl <= MAX_WORD_LENGTH) {
char *d = ALLOCV_N(char, vbuf, sl);
l = shrink_space(d, s, l);
s = d;
}
}
- {
+ if (l > 0 && l <= MAX_WORD_LENGTH) {
const struct zone *z = zonetab(s, (unsigned int)l);
if (z) {
int d = z->offset;
diff --git a/ext/date/prereq.mk b/ext/date/prereq.mk
index 4aff03a4f6..b9d9a24dd4 100644
--- a/ext/date/prereq.mk
+++ b/ext/date/prereq.mk
@@ -1,7 +1,7 @@
.SUFFIXES: .list
.list.h:
- gperf --ignore-case -E -C -c -P -p -j1 -i 1 -g -o -t -N $(*F) $< \
+ gperf --ignore-case -C -c -P -p -j1 -i 1 -g -o -t -N $(*F) $< \
| sed -f $(top_srcdir)/tool/gperf.sed \
> $(@F)
diff --git a/ext/date/zonetab.h b/ext/date/zonetab.h
index c76056d548..37df5b9e69 100644
--- a/ext/date/zonetab.h
+++ b/ext/date/zonetab.h
@@ -1,5 +1,5 @@
/* ANSI-C code produced by gperf version 3.1 */
-/* Command-line: gperf --ignore-case -E -C -c -P -p -j1 -i 1 -g -o -t -N zonetab zonetab.list */
+/* Command-line: gperf --ignore-case -C -c -P -p -j1 -i 1 -g -o -t -N zonetab zonetab.list */
/* Computed positions: -k'1-4,$' */
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
@@ -39,6 +39,12 @@ struct zone {
static const struct zone *zonetab();
#line 9 "zonetab.list"
struct zone;
+
+#define TOTAL_KEYWORDS 170
+#define MIN_WORD_LENGTH 1
+#define MAX_WORD_LENGTH 17
+#define MIN_HASH_VALUE 5
+#define MAX_HASH_VALUE 438
/* maximum key range = 434, duplicates = 0 */
#ifndef GPERF_DOWNCASE
@@ -495,15 +501,6 @@ static const struct stringpool_t stringpool_contents =
const struct zone *
zonetab (register const char *str, register size_t len)
{
- enum
- {
- TOTAL_KEYWORDS = 170,
- MIN_WORD_LENGTH = 1,
- MAX_WORD_LENGTH = 17,
- MIN_HASH_VALUE = 5,
- MAX_HASH_VALUE = 438
- };
-
static const struct zone wordlist[] =
{
{-1}, {-1}, {-1}, {-1}, {-1},