Ruby file inconsistency found in latest 1.9.3 release

I was working on a Rails project and needed to parse some dates, obtaining the times in seconds since the Epoch (January 1, 1970).

I was using code such as in the following snippet using examples from the documentation for Class: DateTime

date_time = DateTime.strptime("01-01-1930", '%m-%d-%Y')
secs = date_time.strftime('%s')

This worked fine in ruby 1.9.3p392 which I was using on a production server, returning the time in seconds as -1262304000

Using an older version of Ruby on my development machine, I was getting a positive number.   After some searches I found that a bug had been found and submitted with the title “DateTime#strftime(“%s”) overflow on 32-bit platform”.  The fix was made in revision r36265.

Latest ruby 1.9.3 release has inconsistent file revision

I downloaded Ruby 1.9.3-p448 which corresponds to revision 41675.    All well and good?

Not quite  – I was still seeing the same issue with older dates before 12/24/1935.

After some digging, I discovered that the file ext/date/date_core.c in this download does not match what should be in revision 41675.   After a lot of searching, I was unable to find an exact match for this file in its revision history, but the closest revision to what was included in the download seemed to be 35002.

Ruby Bug filed on 1.9.3 release.   Ruby 2.0 has the proper fix.

I filed bug 8580 to report the issue.   I checked the latest Ruby 2.0 release (Ruby 2.0.0-p247) and found that the fix made in r36265 was present in date_core.c.  I’ve successfully switched to using 2.0.0-p247 and now my code is happy again 🙂

Advertisements

One response to “Ruby file inconsistency found in latest 1.9.3 release

  1. Update 11/9/14: I was reviewing the status of bug report #8580 and noted that the problem was fixed in r42017.

    Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s