失われた誕生日のバグが私たちをソ連の歴史にどのようにもたらしたか

ある顧客の企業ポータルで、プロファイル内の一部のユーザーが生年月日を正しく表示していませんでした。必要な日ではなく、前の日付が表示されていました。私たちの開発者は、このエラーの理由が歴史の奥深くに隠されていることを発見しました。



まず、チームはバックエンドをチェックし、データが正しく受信されていることを確認しました。ユーザーブラウザとサイトとの相互作用のログを分析したところ、バグはAppleデバイスのSafariでのみ再現されていることが判明しました。また、ユーザーが生年月日が正しく表示されていると言うと、コンピューターのGoogle Chromeなど、別のデバイスやブラウザーからポータルにアクセスします。





さらに、チームはさまざまな期間にわたって反復を開始し、バグがどの日付に関連付けられているかを理解するために、時間間隔を徐々に短くしました。問題は1930年6月頃に発生していることが判明しました。これはタイミングの停止が発生する場所であり、Safariでのみ発生します。彼らは1930年6月21日に何が特別であるかを理解し始め、ソビエト連邦でその日、時間が1時間進んだことを掘り起こしました。 Google Chromeはこの状況を正しく処理しますが、Safariは処理しません。





今回を伝える変数の形式のもう1つの機能。このフォーマットは、時間ゼロからのミリ秒数をカウントします。スタンプは1970年1月1日です。Google Chromeは、6月21日の日付を次のように処理します。午後11時59分から午前1時までは、1000ミリ秒(1秒)かかります。つまり、今回は「消えます」。一方、Safariは、時計がソ連で翻訳されたことを知らないため、今回がそこにあると信じています。





チームはこのバグをAppleフィードバックアシスタントに報告し、応答を待っています。そして、ポータルは次のリリースで独自のパッチを受け取ります。





PS調査中に、開発者は別の興味深い事実に注意を向けました。ユーザーには、1年なしで生年月日のみをポータルに表示できる機能があります。そして、ユーザーがそのような設定を選択すると、値「4AD」がバックエンドから送信されることが判明しました。ポータルの作成者がこの日付を最後に選択した理由を特定することができました。





最初は、1つが最も単純なデフォルト値として設定されていたことが判明しました。しかし、その後、検索にバグが表示されました。2月29日に誕生日を迎えた人は見つかりませんでした。使用時間ストレージ構造では、うるう年以外の2月29日からインスタンスを作成することはできません。したがって、私たちの時代の最初のうるう年はコードで規定され、すべてが機能しました。








All Articles