Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
0f528932
Commit
0f528932
authored
7 years ago
by
Yukihiro "Matz" Matsumoto
Committed by
GitHub
7 years ago
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3552 from ksss/time
Fix infinity loop ref #3546
parents
66980493
397f1fc9
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
31 additions
and
3 deletions
+31
-3
mrbgems/mruby-time/src/time.c
mrbgems/mruby-time/src/time.c
+13
-0
mrbgems/mruby-time/test/time.rb
mrbgems/mruby-time/test/time.rb
+18
-3
No files found.
mrbgems/mruby-time/src/time.c
View file @
0f528932
...
...
@@ -211,6 +211,16 @@ mrb_time_wrap(mrb_state *mrb, struct RClass *tc, struct mrb_time *tm)
return
mrb_obj_value
(
Data_Wrap_Struct
(
mrb
,
tc
,
&
mrb_time_type
,
tm
));
}
static
void
check_num_exact
(
mrb_state
*
mrb
,
double
num
)
{
if
(
isinf
(
num
))
{
mrb_raise
(
mrb
,
E_FLOATDOMAIN_ERROR
,
num
<
0
?
"-Infinity"
:
"Infinity"
);
}
if
(
isnan
(
num
))
{
mrb_raise
(
mrb
,
E_FLOATDOMAIN_ERROR
,
"NaN"
);
}
}
/* Allocates a mrb_time object and initializes it. */
static
struct
mrb_time
*
...
...
@@ -219,6 +229,9 @@ time_alloc(mrb_state *mrb, double sec, double usec, enum mrb_timezone timezone)
struct
mrb_time
*
tm
;
time_t
tsec
=
0
;
check_num_exact
(
mrb
,
sec
);
check_num_exact
(
mrb
,
usec
);
if
(
sizeof
(
time_t
)
==
4
&&
(
sec
>
(
double
)
INT32_MAX
||
(
double
)
INT32_MIN
>
sec
))
{
goto
out_of_range
;
}
...
...
This diff is collapsed.
Click to expand it.
mrbgems/mruby-time/test/time.rb
View file @
0f528932
...
...
@@ -10,7 +10,14 @@ assert('Time', '15.2.19') do
end
assert
(
'Time.at'
,
'15.2.19.6.1'
)
do
Time
.
at
(
1300000000.0
)
assert_kind_of
(
Time
,
Time
.
at
(
1300000000.0
))
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
Float
::
NAN
)
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
Float
::
INFINITY
)
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
-
Float
::
INFINITY
)
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
,
Float
::
NAN
)
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
,
Float
::
INFINITY
)
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
,
-
Float
::
INFINITY
)
}
end
assert
(
'Time.gm'
,
'15.2.19.6.2'
)
do
...
...
@@ -37,14 +44,22 @@ assert('Time#+', '15.2.19.7.1') do
t1
=
Time
.
at
(
1300000000.0
)
t2
=
t1
.
+
(
60
)
t2
.
utc
.
asctime
==
"Sun Mar 13 07:07:40 UTC 2011"
assert_equal
(
t2
.
utc
.
asctime
,
"Sun Mar 13 07:07:40 UTC 2011"
)
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
+
Float
::
NAN
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
+
Float
::
INFINITY
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
+
-
Float
::
INFINITY
}
end
assert
(
'Time#-'
,
'15.2.19.7.2'
)
do
t1
=
Time
.
at
(
1300000000.0
)
t2
=
t1
.
-
(
60
)
t2
.
utc
.
asctime
==
"Sun Mar 13 07:05:40 UTC 2011"
assert_equal
(
t2
.
utc
.
asctime
,
"Sun Mar 13 07:05:40 UTC 2011"
)
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
-
Float
::
NAN
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
-
Float
::
INFINITY
}
assert_raise
(
FloatDomainError
)
{
Time
.
at
(
0
)
-
-
Float
::
INFINITY
}
end
assert
(
'Time#<=>'
,
'15.2.19.7.3'
)
do
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment