From ec4ecb6d6d452037359ab8782771b410f30995aa Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 13 Sep 2021 12:30:43 +0900 Subject: Include the invalid value in invalid_utc_offset error --- time.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'time.c') diff --git a/time.c b/time.c index 78184d6b7d..b16ff0a6f1 100644 --- a/time.c +++ b/time.c @@ -2071,14 +2071,13 @@ maybe_tzobj_p(VALUE obj) return TRUE; } -NORETURN(static void invalid_utc_offset(void)); +NORETURN(static void invalid_utc_offset(VALUE)); static void -invalid_utc_offset(void) +invalid_utc_offset(VALUE zone) { - static const char message[] = "\"+HH:MM\", \"-HH:MM\", \"UTC\" " - "or \"A\"..\"I\",\"K\"..\"Z\" expected for utc_offset"; - VALUE str = rb_usascii_str_new_static(message, sizeof(message)-1); - rb_exc_raise(rb_exc_new_str(rb_eArgError, str)); + rb_raise(rb_eArgError, "\"+HH:MM\", \"-HH:MM\", \"UTC\" or " + "\"A\"..\"I\",\"K\"..\"Z\" expected for utc_offset: %"PRIsVALUE, + zone); } static VALUE @@ -2346,7 +2345,7 @@ time_init_args(rb_execution_context_t *ec, VALUE time, VALUE year, VALUE mon, VA vtm.isdst = VTM_ISDST_INITVAL; vtm.utc_offset = Qnil; - VALUE arg = zone; + const VALUE arg = zone; if (!NIL_P(arg)) { zone = Qnil; if (arg == ID2SYM(rb_intern("dst"))) @@ -2358,7 +2357,7 @@ time_init_args(rb_execution_context_t *ec, VALUE time, VALUE year, VALUE mon, VA else if (!NIL_P(utc = utc_offset_arg(arg))) vtm.utc_offset = utc == UTC_ZONE ? INT2FIX(0) : utc; else if (NIL_P(zone = find_timezone(time, arg))) - invalid_utc_offset(); + invalid_utc_offset(arg); } validate_vtm(&vtm); @@ -2376,7 +2375,7 @@ time_init_args(rb_execution_context_t *ec, VALUE time, VALUE year, VALUE mon, VA } else if (NIL_P(vtm.utc_offset = utc_offset_arg(zone))) { if (NIL_P(zone = find_timezone(time, zone)) || !zone_timelocal(zone, time)) - invalid_utc_offset(); + invalid_utc_offset(arg); } } @@ -2509,9 +2508,10 @@ rb_time_num_new(VALUE timev, VALUE off) if (zone_timelocal(zone, time)) return time; } if (NIL_P(off = utc_offset_arg(off))) { - if (NIL_P(zone = find_timezone(time, zone))) invalid_utc_offset(); + off = zone; + if (NIL_P(zone = find_timezone(time, off))) invalid_utc_offset(off); time_gmtime(time); - if (!zone_timelocal(zone, time)) invalid_utc_offset(); + if (!zone_timelocal(zone, time)) invalid_utc_offset(off); return time; } else if (off == UTC_ZONE) { @@ -3751,8 +3751,9 @@ time_zonelocal(VALUE time, VALUE off) if (zone_localtime(zone, time)) return time; if (NIL_P(off = utc_offset_arg(off))) { - if (NIL_P(zone = find_timezone(time, zone))) invalid_utc_offset(); - if (!zone_localtime(zone, time)) invalid_utc_offset(); + off = zone; + if (NIL_P(zone = find_timezone(time, off))) invalid_utc_offset(off); + if (!zone_localtime(zone, time)) invalid_utc_offset(off); return time; } else if (off == UTC_ZONE) { @@ -3916,9 +3917,10 @@ time_getlocaltime(int argc, VALUE *argv, VALUE time) } if (NIL_P(off = utc_offset_arg(off))) { - if (NIL_P(zone = find_timezone(time, zone))) invalid_utc_offset(); + off = zone; + if (NIL_P(zone = find_timezone(time, off))) invalid_utc_offset(off); time = time_dup(time); - if (!zone_localtime(zone, time)) invalid_utc_offset(); + if (!zone_localtime(zone, time)) invalid_utc_offset(off); return time; } else if (off == UTC_ZONE) { -- cgit v1.2.1