SlideShare a Scribd company logo
1 of 20
Download to read offline
あなたの時計は大丈夫?
「想定外」だった日時の不具合




 clu2c動態保存整備士
      東平洋史
日時に関する不具合が起きる原因

• オーバーフローによるもの
 「想定外」の期間使用
 – 桁数の制限
  • n桁で処理→n+1桁目に達してオーバーフロー
 – 積算日時の制限
  • n桁で処理→n+1桁目に達してオーバーフロー
  • nビットで処理→n+1ビット目に達してオーバーフロー
• 大小関係の定義ミスによるもの
 – 辞書順で処理
• その他
オーバーフローによるもの(1)

     桁数の制限
西暦2000年問題

• 年を西暦下2桁で処理
 1997 ⇒ 97
 1998 ⇒ 98
 1999 ⇒ 99
 2000 ⇒ 00
   →00は99より小さい
   →2000年(00)は1900年(00)なので1999年(99)より前!
   →誤作動
⇒年を西暦4桁で表現して対応
西暦2000年問題中途半端な対応
下2桁で処理するまま残そうとしたが…

• 西暦2030年問題        • 西暦2069年問題
 – 00~29なら2000年代    – 00~68なら2000年代
 – 30~99なら1900年代    – 69~99なら1900年代
• 西暦2050年問題        • 西暦2070年問題
 – 00~49なら2000年代    – 00~69なら2000年代
 – 50~99なら1900年代    – 70~99なら1900年代
                   • 西暦2100年問題
                    – 00~99なら2000年代
西暦2008年問題

あるネットゲーム(Perl製)で実際に発生
•年を西暦下2桁で処理
•文字列として格納
•先頭が0だと8進数として扱われる処理系
 2007 ⇒ 07 … 8進数だとここが上限(00~07)
 2008 ⇒ 08 … 08という8進数はない!
 2009 ⇒ 09 … 実はここも該当
西暦2010年問題
•年を西暦下2桁で処理          • 発生した事例
•2進化10進表現として格納        – シチズンの電波時計「ワ
                        ールタイムドシリーズ」
•「10」を0x10=16と誤認!       (2008年に発覚)
 2009 ⇒ 09
                      – オーストラリアクイーンズ
 2010 ⇒ 16              ランド銀行の金融システ
 2011 ⇒ 17   実際より       ム(2010年)
 …           6年後と     – ドイツジェムアルト社のIC
 2018 ⇒ 24   誤認         カード使用不能
 2019 ⇒ 25            – PlayStation3で2010年を閏
 2020 ⇒ 32   実際より       年と誤判定(3月1日に2月
                        29日と表示して発覚)
 …           12年後と
 2029 ⇒ 41   誤認
元号の処理方法による問題
• 昭和100年問題
 – 年を昭和2桁で表現
   • 平成以降も、内部的には昭和として扱う
    – 「平成23年」は「昭和86年」
   • 官公庁や金融機関などに存在
 – 「昭和100年(2025年(平成37年))=昭和0年」と誤認
• 平成100年問題
 – 年を平成2桁で表現
 – 「平成100年(2088年)=平成0年」と誤認
もう一つの西暦2000年問題(閏年)

• 閏年と算出できない
 1. 4で割り切れる年は閏年
  2000は4で割り切れる
 2. 4でも100でも割り切れる年は閏年ではない
  2000は4でも100でも割り切れる
 3. 4でも100でも400でも割り切れる年は閏年
  2000は4でも100でも400でも割り切れる
 – 条件3を忘れ、西暦2000年を閏年と判定できない
オーバーフローによるもの(2)

    積算日時の制限
西暦2036年問題(NTP)
• 西暦2036年2月6日6時28分15秒(UTC)過ぎに
  NTPが誤作動
 – 西暦1990年1月1日0時0分0秒(UTC)からの経過秒
   数で時間を表現
 – 32ビット符号なしの整数で実装
 – 西暦2036年2月7日6時28分15秒(UTC)
               = 西暦1990年1月1日0時(UTC)
   •2^32 まで進むと0と認識
       – 2^32     = 100000000000000000000000000000000
       – 2^32 – 1 = 11111111111111111111111111111111

                               32ビット
西暦2038年問題(C言語のtime_t型)
• 西暦2038年1月19日3時14分7秒(UTC)過ぎにC言語のtime_t型
  を使ったプログラムが誤作動
  – 西暦1970年1月1日0時0分0秒(UTC)からの経過秒数で時間
    を表現
  – 32ビット符号つきの整数で実装した場合に問題発生
  – 西暦2038年1月19日3時14分7秒(UTC)
               ⇒西暦1901年12月13日20時45分7(UTC)
     •2^31 – 1 = 2147483647 の次を -2^31 = -2147483648 と認識
         0 1111111111111111111111111111111 = 2^31 - 1
         1 0000000000000000000000000000000 = -2^31
         1 1111111111111111111111111111111 = -1
         先頭のビットが1の時はマイナスの数になる
西暦2038年問題の亜種
• 西暦2004年1月10日13時37分4秒(UTC)過ぎに誤作動
  – 西暦1970年1月1日0時0分0秒(UTC)から2^30秒後
  – 時間を2倍する処理が入っていた
• 不具合が起きると判明した or 起きたシステム
  – IIJのルータ「SEIL/neu」シリーズ一部機種
      • NTPサーバから時刻を取得する設定にすると誤作動
      • ファームウェアの修正で事前に対処
  – 日本IBM製ATM
      • 日本IBM製ソフト「FINEACE/6000」関連の不具合
  – KDDI課金システム
      • 国内電話サービスの料金を誤請求
積算日時による問題一覧(一部)
  問題箇所             誤作動の概要                 原因
NTP         西暦2036年2月7日6時28分16秒⇒     西暦1990年1月1日からの
            西暦1900年1月1日0時0分0秒        秒数が32ビット整数

C言語の        西暦2038年1月19日3時14分8秒⇒     西暦1970年1月1日
            西暦1901年12月13日20時45分52秒   からの秒数が32ビット符号
time_t型                              付き整数
GPS         西暦1999年8月21日の週は          西暦1980年1月6日からの
            1980年1月6日と同じ週            週が10ビットの整数
System zの   西暦2042年9月17日23時53分46秒⇒ 西暦1990年1月1日からの
STCK命令で取    西暦1900年1月1日0時0分0秒      μ秒数が限界を超える
得する64ビット
のTODクロック
MacOS 6.X 西暦2019年12月31日⇒             西暦1920年1月1日
            西暦1920年1月1日              からの年数が2桁の整数

Macintosh   西暦2040年2月6日18時28分16秒⇒    西暦1904年1月1日からの
            西暦1904年1月1日0時0分0秒        秒数が32ビット符号付き整
128K                                 数
ファイルのタイムスタンプの制限
ファイルシステム             日付の範囲
ext2、ext3、   西暦1901年12月14日~2038年1月18日
ReiserFS
HFS、HFS+      西暦1904年1月1日~2040年2月6日
FAT          西暦1980年1月1日~2107年12月31日
ext4         西暦1901年12月14日~2514年4月25日
NTFS         西暦1601年1月1日~60056年5月28日
大小関係の定義によるもの

   辞書順で処理
西暦2001年9月9日問題
2001年9月9日午前1時46分40秒(UTC)関連
•原因
 – 西暦1970年1月1日0時(UTC)からの秒数で処理
 – ソートを文字列(辞書順)で行なっていたため、1,000,000,000
   < 999,999,999 と判定
 – 2001年9月9日 1:46:40秒以降のデータを「古い!」と判断
•問題が起きたプログラムおよびシステム
 –   Yahoo! 掲示板
 –   Gnus
 –   Windows Meの「システムの復元」
 –   Sun Directory Service(Solaris用)
その他
西暦3000年問題
• MSVCR80.DLL(64ビット版Microsoft Visual
  C++ 8.0)で発生
• 西暦3000年1月1日以降の時間引数を処理させ
  るとアサーションエラーが発生。
まとめ
• 耐用年数をきちんと考えて作りましょう
• 耐用年数を超える場合は対策を施しましょう
• テストは慎重に行いましょう

More Related Content

More from 洋史 東平

大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編洋史 東平
 
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン洋史 東平
 
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)洋史 東平
 
大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2洋史 東平
 
大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした洋史 東平
 
自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?洋史 東平
 
続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした洋史 東平
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした洋史 東平
 
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話洋史 東平
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話洋史 東平
 
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行洋史 東平
 
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみたFreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた洋史 東平
 
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみたSolaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた洋史 東平
 
Google Chrome on Android を自動実行
Google Chrome on Android を自動実行Google Chrome on Android を自動実行
Google Chrome on Android を自動実行洋史 東平
 
Selenium Gridで遊ぼう
Selenium Gridで遊ぼうSelenium Gridで遊ぼう
Selenium Gridで遊ぼう洋史 東平
 
WebDriverで遊ぼう
WebDriverで遊ぼうWebDriverで遊ぼう
WebDriverで遊ぼう洋史 東平
 
サルから進化(?) Selenium WebDriverの 自動実行プログラム
サルから進化(?)Selenium WebDriverの自動実行プログラムサルから進化(?)Selenium WebDriverの自動実行プログラム
サルから進化(?) Selenium WebDriverの 自動実行プログラム 洋史 東平
 

More from 洋史 東平 (20)

大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編大人の事情が自販機に 超自然現象を起こした Xライダー編
大人の事情が自販機に 超自然現象を起こした Xライダー編
 
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
大人の事情は自販機に超自然現象を起こさなかったのか? ライダーマン
 
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
大人の事情が自販機に超自然現象を起こした V3(ヴイスリャー)
 
大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2大人の事情が自販機に超自然現象を起こした その2
大人の事情が自販機に超自然現象を起こした その2
 
大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした大人の事情が自販機に超自然現象を起こした
大人の事情が自販機に超自然現象を起こした
 
自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?自販機の超自然現象 果たして収まるか?
自販機の超自然現象 果たして収まるか?
 
続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした続・自動販売機の大人の事情をテストした
続・自動販売機の大人の事情をテストした
 
自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした自動販売機の大人の事情をテストした
自動販売機の大人の事情をテストした
 
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
 
bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話bashでWebブラウザ(Selenium WebDriver)を動かした話
bashでWebブラウザ(Selenium WebDriver)を動かした話
 
OSUnC川越2016
OSUnC川越2016OSUnC川越2016
OSUnC川越2016
 
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
Selenium WebDriverでFreeBSD 10.2のGoogle Chromeを自動実行
 
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみたFreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
FreeBSD 10.2(amd64)でSelenium WebDriverを動かしてみた
 
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみたSolaris 11.3(x86)でSelenium WebDriverを動かしてみた
Solaris 11.3(x86)でSelenium WebDriverを動かしてみた
 
OSCで何したの?
OSCで何したの?OSCで何したの?
OSCで何したの?
 
Google Chrome on Android を自動実行
Google Chrome on Android を自動実行Google Chrome on Android を自動実行
Google Chrome on Android を自動実行
 
Selenium Gridで遊ぼう
Selenium Gridで遊ぼうSelenium Gridで遊ぼう
Selenium Gridで遊ぼう
 
WebDriverで遊ぼう
WebDriverで遊ぼうWebDriverで遊ぼう
WebDriverで遊ぼう
 
おまけ
おまけおまけ
おまけ
 
サルから進化(?) Selenium WebDriverの 自動実行プログラム
サルから進化(?)Selenium WebDriverの自動実行プログラムサルから進化(?)Selenium WebDriverの自動実行プログラム
サルから進化(?) Selenium WebDriverの 自動実行プログラム
 

Recently uploaded

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

あなたの時計は大丈夫? 「想定外」だった日時の不具合(原本)