Błąd roku 2001

Microsoft potwierdza, że błąd w Visual C++ może wpłynąć niekorzystnie na funkcję zmiany daty.

Microsoft potwierdza, że błąd w Visual C++ może wpłynąć niekorzystnie na funkcję zmiany daty.

Błąd prawdopodobnie nie spowoduje dużego bałaganu w systemach informatycznych przedsiębiorstw. Może natomiast okazać się uciążliwy dla niektórych użytkowników mniejszych aplikacji. Jak pisaliśmy w styczniu br. w Computerworld Online, niezależni programiści znaleźli błąd w bibliotekach CRT dołączanych do Visual C++, związany z datą 1 kwietnia 2001 r. Błąd występuje również w najnowszej wersji pakietu narzędziowego Microsoftu.

Prima aprilis

Problem wynika stąd, że niepoprawnie działa wewnętrzna funkcja cvtdate, która służy m.in. do obliczania odstępu między zadanymi okresami. Z tej pomocniczej funkcji korzystają praktycznie wszystkie procedury biblioteczne CRT, związane z pomiarem czasu. Problem dotyczy aplikacji, które stosują CRT i wymagają pomiaru czasu z dokładnością do godzin. Pojawia się on dlatego że źle obliczany jest moment zmiany na czas letni - gdy pierwsza niedziela kwietnia (data zmiany czasu w USA, w Europie zmiana następuje w ostatnią niedzielę marca) wypada pierwszego dnia miesiąca. Po tygodniu wszystko wraca do normy.

O ile błędy roku 2000 odnosiły się do Windows API, o tyle ten błąd dotyczy tylko niektórych programów pisanych przy użyciu VC++. Wcześniej jednak, w przypadku problemów roku 2000, Microsoft mógł rozpowszechniać poprawki do systemu operacyjnego. Tu sprawa jest bardziej złożona. Program może korzystać z bibliotek CRT na dwa sposoby - będąc na stałe połączony z kodem albo używając specjalnej biblioteki dołączanej dynamicznie podczas działania programu msvc.dll. Jeżeli program korzysta z biblioteki DLL, wystarczy ją zamienić, by program działał poprawnie. Natomiast, gdy jest połączony statycznie, konieczna jest rekompilacja kodu i połączenie z poprawioną wersją biblioteki.

Bez paniki

Microsoft zapowiada udostępnienie wkrótce poprawek do zestawu narzędzi programistycznych Visual Studio, które usuną błąd. Wraz z Visual C++ jest rozprowadzany też kod źródłowy bibliotek CRT, co pozwala na samodzielne pozbycie się błędu. Niestety, Microsoft nie informuje, jak nieszczęsną funkcję poprawić. Przedstawiciele firmy twierdzą, że z kompilatora Visual C++ korzysta ok. 800 tys. programistów.

Producenci innych kompilatorów C dotychczas nie wypowiedzieli się, czy błąd występuje także w ich bibliotekach. Jest jednak prawdopodobne, że konstrukcja funkcji związanych z pomiarem czasu jest zbliżona.

W ub.r. kłopoty ze zmianą czasu letniego w systemach komputerowych na godzinę zablokowały sejfy w jednym ze szwajcarskich banków.

W celu komercyjnej reprodukcji treści Computerworld należy zakupić licencję. Skontaktuj się z naszym partnerem, YGS Group, pod adresem [email protected]

TOP 200