Skip to main content

CodeSOD: Going on a teDa

3 months 1 week ago

Carlos G found some C++ that caused him psychic harm, and wanted to know how it ended up that way. So he combed through the history. Let's retrace the path with him.

Here was the original code:

void parseExpiryDate (const char* expiryDate) { // expiryDate is in "YYMM" format int year, month; sscanf(expiryDate, "%2d%2d", &year, &month); //... }

This code takes a string containing an expiry date, and parses it out. The sscanf function is given a format string describing two, two digit integers, and it stores those values into the year and month variables.

But oops! The expiry date is actually in a MMYY format. How on earth could we possibly fix this? It can't be as simple as just swapping the year and month variables in the sscanf call, can it? (It is.) No, it couldn't be that easy. (It is.) I can't imagine how we would solve this problem. (Just swap them!)

void parseExpiryDate(const char* expiryDate) { // expiryDate is in "YYMM" format but, in some part of the code, it is formatted to "MMYY" int year, month; char correctFormat[5]; correctFormat[0] = expiryDate[2]; correctFormat[1] = expiryDate[3]; correctFormat[2] = expiryDate[0]; correctFormat[3] = expiryDate[1]; correctFormat[4] = '\0'; sscanf(correctFormat, "%2d%2d", &year, &month); //... }

There we go! That was easy! We just go, character by character, and shift the order around and copy it to a new string, so that we format it in YYMM.

The comment here is a wonderful attempt at CYA. By the time this function is called, the input is in MMYY, so that's the relevant piece of information to have in the comment. But the developer really truly believed that YYMM was the original input, and thus shifts blame for the original version of this function to "some part of the code" which is shifting the format around on them, thus justifying… this trainwreck.

Carlos replaced it with:

void parseExpiryDate (const char* expiryDate) { // expiryDate is in "MMYY" format int month, year; sscanf(expiryDate, "%2d%2d", &month, &year); //... } .comment { border: none; } [Advertisement] Keep all your packages and Docker containers in one place, scan for vulnerabilities, and control who can access different feeds. ProGet installs in minutes and has a powerful free version with a lot of great features that you can upgrade when ready.Learn more.
Remy Porter

India's One-Airline State

3 months 1 week ago
An anonymous reader shares an analysis: In most major aviation markets, including the U.S. and Europe, competition is an oligopolistic affair, with several large airlines competing for market share. India's domestic sector, however, is increasingly characterized by the ascent of a single airline. Low-cost carrier IndiGo has achieved an extraordinary concentration of the market, capturing approximately 64.4% of all passenger traffic as of May. More strikingly, the airline operates with a near-monopoly on 66% of its domestic routes, facing little to no direct competition in a significant portion of its network. This position is the culmination of a decade-long expansion that saw the exit of rivals like Jet Airways and GoAir. Today, its remaining competitors continue to struggle; SpiceJet's domestic market share has fallen to just 2% while it operates a reduced fleet of only 19 aircraft. Air India, despite its acquisition by the Tata Group in 2022, has been slow in its restructuring and continues to cede domestic ground, with the flag carrier remaining unprofitable.

Read more of this story at Slashdot.

msmash