Rok 2010 przywitał nas prawdziwym wysypem błędów związanych ze zmianą daty. Szereg systemów informatycznych odmówiło współpracy, a inne wykonywały swe zadanie niepoprawnie.
W ciągu kilku ostatnich dni, spore zainteresowanie wzbudził problem roku 2010, z jakim borykali się użytkownicy popularnego rozwiązania antyspamowego SpamAssassin. Okazało się, że filtr ten wyposażony jest w regułę, która każdej wiadomości datowanej na rok 2010 (lub późniejszy) dodaje 3,4 punktu karnego. W efekcie znaczna część poprawnych wiadomości została sklasyfikowana jako spam. Oto jaki komentarz do tejże reguły można było odnaleźć w konfiguracji filtru:
The date is grossly in the future.
Obecnie, problem ten został już rozwiązany.
Komercyjne oprogramowanie również nie ustrzegło się błędów związanych ze zmianą roku. Endpoint Protection Manager, oprogramowanie klasy enterprise służące do zarządzania zabezpieczeniami stacji roboczych odmówiło współpracy z sygnaturami opublikowanymi w roku 2010. W opublikowanym przez producenta oświadczeniu, czytamy między innymi:
An issue has been identified in the Symantec Endpoint Protection Manager (SEPM) server whereby all types of SEP definition content [AV/AS, IPS] with a date greater than December 31, 2009 11:59pm are considered to be “out of date”.
Firma Symantec, jako czasowe obejście problemu, rozpoczęła publikowanie najnowszych sygnatur z zeszłroczną datą.
Poza tym, błąd roku 2010 dotknął również klientów Bank of Queensland oraz kilku banków niemieckich. Tym razem problem polegał na tym, że informatyczne systemy bankowe uznały rok 2010 za rok 2016. Problemy o podobnej naturze (datowanie wiadomości z roku 2010 na rok 2016) spotkały również użytkowników niektórych telefonów komórkowych z systemem Windows Mobile. Problemy z rokiem 2010 miał również sieciowy gigant, firma Cisco. Organizacja Internet Storm Center poinformowała o noworocznych problemach w działaniu modułu Cisco Content Switching Module (CSM).
O ile błędy rozpoznawania roku 2010 jako 2016 wynikają z nieprawidłowej interpretacji zapisu liczbowego, o tyle pozostałe wspomniane błędy skłaniają do refleksji. Okazuje się bowiem, że programista jest w stanie (umyślnie lub nieumyślnie) wprowadzić do oprogramowania (otwartego bądź komercyjnego) funkcję zaburzającą jego działanie przy napotkaniu określonej daty. Jak pokazują powyższe przykłady, niestety istnieje duże prawdopodobieństwo, że taki błąd zostanie wykryty dopiero w momencie jego aktywacji!
Materiał pochodzi z serwisu HARD CORE SECURITY LAB.


Y2K10 = 2K10 = 2K1 = 2.1K = 2100
A może tak: Y2K10 = year 2000 and (+) 10 = 2010 :)?
Bez wątpienia 2K10 = 2100 a 2010 powinno się oznaczać wyłącznie jako 2K01.
Kup w sklepie elektronicznym rezystor o oporności 2K1, ciekawe czy dostaniesz 2010 Ohm czy jednaj 2100 Ohm…
Nie mówimy o oznaczeniach rezystorów, tylko lat. Jeśli chodzi o oznaczanie lat przyjęło się użycie 2K10 jako 2010.
od lat, czyli od zeszłego miesiąca?
może podrzućcie to na xkcd 🙂
@hcsl.pl
To zle sie przyjelo. Po pierwsze 2010 nie wymawia sie jako two thousand and ten tylko twenty ten, tak po prostu. Po drugie przedpiszcy maja racje a Ty sie mylisz.
K to jest kilo, czyli tysiąc, czyli K jest tu separatorem.
Opornik 2K2 oznacza 2200Ohm i jest to oczywiste dla wszystkich elektroników (tak jak 2R2, 2u2, 2p2), ale Y2K10 to nie wiedział bym jak odgadnąć – powinno być Y2K1 i oznaczało by to Y2100, lub Y2K01, które było by zapisem bezsensownym, bo normalniej wygląda Y2010.
Najgorsze jest to, że zapis 2k10 i tak nic nie daje, bo jest ni chu-chu krótszy od 2010…
wyjaśnię Ci : 1k=1kilo. Widziałem również zapisa 1M, zgadnij co oznacza 🙂
jak zwykle poziom komentarzy żenujący.
k = kilo
Proponuję jasny i czytelny zapis „010.M3”, tj. rok 10 3ciego millenium (rok 40000 zapisywalibyśmy 000.M40)
2K10 = 2K1
taa….
pozdr,
fEnIo
Co złego jest w odfiltrowywaniu wiadomości wysłanych z przyszłości? Ta funkcja nie została dodana w celu zaburzania działania programu, została dodana w celu zapewnienia lepszego działania. Została wprowadzona absolutnie umyślnie. Problem polegał jedynie na tym, że zapomniano o zmianie roku. Zwyczajnie zabrakło jednego testu. A rok 2010 nie ma z tym nic wspólnego, równie dobrze mógłby to być rok 2012. Co do problemów z interpretacją daty, to odsyłam wyżej, bo okazuje się, że ta kwestia też wymaga rozważenia, nie jest tak banalna jak się wydaje.
To, że funkcja ma arbitralnie ustawiony rok, zamiast brać dzisiejszą datę i dodawać powiedzmy 20 lat.
Robi to ze względów wydajnościowych. Po poprawce regexp też jest wpisany na sztywno, tyle że łapie dopiero od 2020.
A z ciekawości spytam, na czym polega błąd z pomyłką 2010 i 2016? Bo z ciekawości sprawdziłem jak wyglądają te liczby w różnych systemach liczbowych:
dec | bin | oct | hex
2016 | 11111100000 | 3740 | 7E0
2010 | 11111011010 | 3732 | 7DA
Spotkałem gdzieś takie wyjaśnienie:
Dzięsiątkę w 2010 można zapisać w ten sposób: 0001 0000.
Teraz jeśli tę końcówkę 0001 0000 zinterpretujemy jako liczbę binarną, to otrzymamy dziesiętną wartość 16.
Nie wiem jednak, czy to rzeczywiście prawdziwe wyjaśnienie tych sytuacji.
W części przypadków chodzi o to, że 1) nie jest trzymany cały rok, 2) to '10' jako 0x10 jest nieściśle traktowane – w jednym miejscu jako liczba BCD, w innym zwykła U2.
To ja też się dołączę 😉 Jak rozumiem zapis
2K10
jest w dec, 1K = 1024. A więc:
2K = 2*1024 = 2048
2048 + 10 = 2058
Hmmmm… Kto poda jeszcze jakąś interpretację? I którą wybrać? 😉
pzdr.
Ps. Ewentualnie:
2K10 -> 204810 ….
2E10, 2D10 oznacza liczbę zmiennoprzecinkową = 2.0*10^10 z odpowiednio pojedynczą bądź pdwójną precyzją (reprezentacja 32, 64 bitową) to 2K10 musi oznaczać to samo tyle, że z precyzją 1024 (reprezentacja 32768 bitowa czyli 32kbitowa).
Myslę, że wszystkie problemy roku 2K10 wynikają tylko i wyłącznie ze złej implementacji liczb 32kbitowych w omawianym oprogramowaniu.
@czepol "10" szestnastkowo to 16 dziesiętnie
Wniosek, albo zapisują datę w dwóch znakach, albo mają zaszłości z jakiegoś naprawdę zabytkowego systemu używającego notacji BCD (http://pl.wikipedia.org/wiki/Kod_BCD)
Wynika z kodowania BCD.
Błąd wynika z tego, że istnieje trochę systemów używających kodowania BCD. W systemie BCD w jednym bajcie zapisujemy dwie cyfry dziesiętne, na 4-ch bitach każda. I tak mamy:
Dec/Hex/BCD
0 0x00 0x00
1 0x01 0x01
…. itd. …
9 0x09 0x09
10 0x0A 0x10
11 0x0B 0x11
12 0x0C 0x12
13 0x0D 0x13
14 0x0E 0x14
15 0x0F 0x15
16 0x10 0x16
17 0x11 0x17
itd.
Widać już co się stało, jak licznik przekrecił się z 9 na 10, a programista zapomniał przekonwertować BCD na naturalny kod dwójkowy?
Ładniej wygląda to w formie 2.01k
To po jakiego wała jest tu K skoro długość napisu przed pseudooptymalizacją jest taka sama ?
No dokładnie. 2k (jako 2000) czy nawet 2k9 (2009) ma jeszcze jakiś sens, oszczędzamy znaki, ale 2k10 to już IMO wydziwianie 😛
Nie chodzi tu o oszczędność znaków, ale raczej o nawiązanie do błędu y2k :).
chyba, że tak 🙂
Najkrócej jest chyba tak: MMX. Wiedzieli to już nawet twórcy Pentiuma…
a 2016 wzięło się stąd, że system pisali programiści używający vi. Po prostu wpisali 2010 (czyli MMX), a potem chcieli odpalić swój edytor, ale nie zauważyli, że inny terminal jest w focusie i wyszło MMXVI
„dwa ka dziesięć” lepiej brzmi.
To jest po prostu iteracja.
Pierwszy problem z datą to był Y-45 (v.0-45) nazwa kodowa "Julius"
Potem przepisano cały kod i stabilna wersja wyszła jako Y1K582 "Gregorius XIII" (build 1582)
Potem była wersja alpha Y2K "Millenium", ale nie odniosła skutku
Po dokonaniu korekt najnowsza wersja to Y2K010 i jest uważana za spory sukces.
Dla mnie osobiście problemów wiele nie wynikło, jedynie w rozkładach PKP w rozwijanym kalendarzu jako default przyjmuje ten sam dzień i miesiąc, ale rok 2016.
Na szczescie, poniewaz SpamAssasin jest open source,
problem zostal odpowiednio wczesnie wykryty i usuniety.
Problem w tym, że właśnie nie został wykryty "odpowiednio wcześnie", czyli jeszcze zanim się uaktywnił w systemach produkcyjnych…
Najwyrazniej nie wyczules ironii.
Co tylko pokazuje jak realnie przydaje sie dostepnosc kodu.
Jak widać jednak jest skuteczne bo błąd od razu poprawiono a w zamkniętym oprogramowaniu symanteka zamiast dać aktualizacje to dają bazy wirusów ze starą datą. Witać jeszcze nie wiedzą gdzie błąd/nie potrafią naprawić.
Akurat nieprawidłowo przefiltrowany SPAM to mały problem (o ile ów email nie był zbyt ważny). Dziś rano w radio słyszałem, że co czwarta karta płatnicza w Niemczech nie działa z powodu problemu roku 2010…
Ja chyba wrócę do trzymania gotówki w skarpecie… 😉
Co trzecia skarpeta jest dziurawa.
informatyka to nie elektronika..
wiem ze 2k10 to 2100 ohmow
ale..
jak liczysz ilosc piw w zgrzewce to zaczynasz od 1 czy od 0? komputer zaczyna od zero… Ty od 1.. i kto ma racje?
w informatyce 2k10 oznaczamy jako 2010
przeczytaj sobie
dwa k dziesiec
a nie
dwa k sto
sami spece…
http://xkcd.com/163/
2k10 to skrót informatyczny? Chyba raczej skrót amerykańskich emo-ludków. Zamiast pisać k piszcie 0 i nikt nie będzie miał wątpliwości. Pozatym to żaden skrót bo ilość znaków jest ta sama. A 2101r napiszecie 2k101 ? I to też pewnie będzie skrót? Przy roku 2000 to miało sens tylko, ale jakieś debile zaczeli przenosić na kolejne lata 200x i teraz zaczyna się idiotyczny problem. Zupełnie jak ci programiści co nie przewidzieli roku 2010.
2101r. = 835 (hex)
Ano , jak widzę ile w niektórych sklepach trwa płacenie kartą to wolę mieć zawsze przy sobie trochę gotówki , ona nigdy nie zawiedzie .