ZuneGate '08: what really happened!

Microsoft botched the code in the firmware for its Zune 30GB handheld players.

Here's the deal. Microsoft botched the code in the firmware for its Zune 30GB handheld players. Like a ticking time bomb, the problem started exploding for Zune owners once 2008 started transitioning into 2009. Users worldwide quickly found that their Zunes were completely locked out. Locked out as in "completely inoperable," that is: Zunes began resetting without warning or completely turning off. When a user flipped the power back on, the Zune operating system would begin to load and freeze on the actual loading screen. And no amount of begging, pleading, or cursing could fix the issue for a hapless user.

Microsoft was quick on the "solution," which I've paraphrased thusly: Wait it out. Not the best response I can think of, even though it did end up working in the end. But two larger questions remain. How did this happen in the first place, and what other unpleasant code lurks within the Zune OS? I unfortunately don't have much of an answer for the latter, but AeroXperience's own Bryant Zadegan dug deep into the code to find the Achilles' Heel that took the Zunes out of commission. You can check out the full source code right here if you want to take a look at the big picture in a more readable fashion than this blog post can provide. We've snipped down to the problem area shown below:

----------------------------------

#define ORIGINYEAR 1980

BOOL ConvertDays(UINT32 days, SYSTEMTIME* lpTime)

{

int dayofweek, month, year;

UINT8 *month_tab;

//Calculate current day of the week

dayofweek = GetDayOfWeek(days);

year = ORIGINYEAR;

while (days > 365)

{

if (IsLeapYear(year))

{

if (days > 366)

{

days -= 366;

year += 1;

}

}

else

{

days -= 365;

year += 1;

}

}

----------------------------------

For all the non-coders out there, here's what happened. According to Zadegan, the code is designed to calculate out the year by looking at the number of days that has elapsed since a predefined ORIGINYEAR of January 1, 1980. The operating system keeps on subtracting 365 days (or 366, in the case of a leap year) from the total number of days, adding one to the year value, until it can no longer do so--thus makes the correct year.

If you're sharp, you will have noticed the single botched element in the code. On a leap year, there are 366 days in a year. December 31 is the 366th day of the year. The amount 366 is greater than 365, but it is not greater than 366. What happens then? The loop cycles back to the beginning to check the 366-day amount that's remaining. It's greater than 365 days, passing through that line of code. It's not greater than 366 days, so nothing happens. The amount loops back through the code, and loops back through the code, and...

Join the Good Gear Guide newsletter!

Error: Please check your email address.

Tags Microsoftprogramming

Our Back to Business guide highlights the best products for you to boost your productivity at home, on the road, at the office, or in the classroom.

Keep up with the latest tech news, reviews and previews by subscribing to the Good Gear Guide newsletter.

David Murphy

PC World (US online)
Show Comments

Essentials

Microsoft L5V-00027 Sculpt Ergonomic Keyboard Desktop

Learn more >

Lexar® JumpDrive® S57 USB 3.0 flash drive

Learn more >

Mobile

Lexar® JumpDrive® S45 USB 3.0 flash drive 

Learn more >

Exec

Lexar® Professional 1800x microSDHC™/microSDXC™ UHS-II cards 

Learn more >

HD Pan/Tilt Wi-Fi Camera with Night Vision NC450

Learn more >

Lexar® JumpDrive® C20c USB Type-C flash drive 

Learn more >

Audio-Technica ATH-ANC70 Noise Cancelling Headphones

Learn more >

Budget

Back To Business Guide

Click for more ›

Most Popular Reviews

Latest News Articles

Resources

PCW Evaluation Team

Azadeh Williams

HP OfficeJet Pro 8730

A smarter way to print for busy small business owners, combining speedy printing with scanning and copying, making it easier to produce high quality documents and images at a touch of a button.

Andrew Grant

HP OfficeJet Pro 8730

I've had a multifunction printer in the office going on 10 years now. It was a neat bit of kit back in the day -- print, copy, scan, fax -- when printing over WiFi felt a bit like magic. It’s seen better days though and an upgrade’s well overdue. This HP OfficeJet Pro 8730 looks like it ticks all the same boxes: print, copy, scan, and fax. (Really? Does anyone fax anything any more? I guess it's good to know the facility’s there, just in case.) Printing over WiFi is more-or- less standard these days.

Ed Dawson

HP OfficeJet Pro 8730

As a freelance writer who is always on the go, I like my technology to be both efficient and effective so I can do my job well. The HP OfficeJet Pro 8730 Inkjet Printer ticks all the boxes in terms of form factor, performance and user interface.

Michael Hargreaves

Windows 10 for Business / Dell XPS 13

I’d happily recommend this touchscreen laptop and Windows 10 as a great way to get serious work done at a desk or on the road.

Aysha Strobbe

Windows 10 / HP Spectre x360

Ultimately, I think the Windows 10 environment is excellent for me as it caters for so many different uses. The inclusion of the Xbox app is also great for when you need some downtime too!

Mark Escubio

Windows 10 / Lenovo Yoga 910

For me, the Xbox Play Anywhere is a great new feature as it allows you to play your current Xbox games with higher resolutions and better graphics without forking out extra cash for another copy. Although available titles are still scarce, but I’m sure it will grow in time.

Featured Content

Latest Jobs

Don’t have an account? Sign up here

Don't have an account? Sign up now

Forgot password?