Slashdot Mirror


2016 Bug Hits Text Messages, Payment Processing

An anonymous reader writes "It seems some systems are suffering from a Y2K16 bug. When 2009 ticked over to 2010, some Australian EFTPOS machines skipped to the year 2016. Coincidentally, some Windows Mobile users are also having issues with their new year SMSes coming from 2016. What function could cause this kind of error?"

12 of 340 comments (clear)

  1. Microsoft by sopssa · · Score: 5, Informative

    Seems Microsoft is supplying some code for EFTPOS machines that is common with Windows Mobile, so it's most likely the same bug in both.

    1. Re:Microsoft by sopssa · · Score: 3, Informative

      Yes they do (almost in every atm actually).

  2. 10 hex is 16 decimal by Anonymous Coward · · Score: 5, Informative

    Could be botched string parsing. Could be binary coded decimals interpreted as binary numbers: BCD encodes two decimal digits in the high and low nibbles of a byte. Therefore BCD 10 is 0001 0000 in binary, which is 16 in decimal.

    1. Re:10 hex is 16 decimal by nycguy · · Score: 5, Informative

      This is almost certainly what it is. The year is stored in an SMS message as a two-digit BCD value, according to this spec. (Click on the link for the "timestamp" field.) Some phones must be treating it as a hex field. (Note that most other fields in the SMS message are in hex.)

    2. Re:10 hex is 16 decimal by Pembers · · Score: 4, Informative

      The specification for the SMS message format pre-dates Y2K by about 15 years. I came across it in 1995 (and thought it was useless - what sort of idiot would try to fit a message into 160 characters? And who would want to type it on a 12-button keyboard?). Where I worked, nobody worried about Y2K until about 1998.

    3. Re:10 hex is 16 decimal by Anonymous Coward · · Score: 4, Informative

      The endianness may make it more sensible. If you have 0x12345678 represented using the correct endianess (the Intel one, not the Sun one), it'll be stored as 0x78563412. Using reverse nibble notation, it'll be 0x87654321.

      But as far as I remember, it is caused by oldold ties to the 4004, which was a 4-bit CPU, inherited via the 8008 and 8080 by the 8086 and 8088.

  3. Re:Some kind of... by Anonymous Coward · · Score: 5, Informative

    I don't think you quite have the hang of binary (10 would be 2, not 3).

  4. Re:Some kind of... by msauve · · Score: 5, Informative

    No, I meant exactly what I said. I didn't say 0b01. 0x10 is the hexadecimal notation for "00010000" binary, which is 16 decimal.

    I used 0x10 because that's standard ANSI C (and ECMA-334 C#), and C is what seems to be spoken on /.. 0b00010000 is non-standard (but allowed by some compilers).

    --
    "National Security is the chief cause of national insecurity." - Celine's First Law
  5. Re:Some kind of... by clone53421 · · Score: 4, Informative

    Let me see if I can straighten it out, then.

    0x10 is a hexadecimal number, 0001 0000 binary, 16 decimal.
    0x10 is a BCD number, 0001 0000 binary, 10 decimal.

    (BCD is an encoding system, not a base system. In hex or binary it’s given in encoded form, but in decimal it’s given in decoded form.)

    --
    Alexander Peter Kristopeit bought his basement from his mommy for one dollar.
  6. Re:Some kind of... by xaxa · · Score: 3, Informative

    0x10 means 0001 0000.

    0001 0000, if that's a binary number, means decimal 16
    0001 0000, if that's binary coded decimal (BCD), i.e. decimal 0-9 represented as 0000 to 1001, means decimal 10.

    (If 0001 0000 was little endian (with 4-bit groupings) it would mean binary 1)

    1234 in binary (4D2 in hexadecimal) is 0000 0100 1110 0010
    1234 in BCD is 0001 0010 0011 0100

  7. no that's a Y210 bug by rubycodez · · Score: 3, Informative

    Y bugs are named for the year in which they occur, not the year they jump....otherwise Y2K would have been Y1.9K, or even better YMCM

  8. Re:Some kind of... by Vintermann · · Score: 4, Informative

    > (a leftover relic from the mainframe era that needed to die over a decade ago)

    No no no. Binary coded decimal is necessary and useful. When you divide 1 by 10, you should get 0.1, not 0.10000000000000001 (which is what you get if you for instance open up a python interpreter and ask for 1.0 / 10.0).

    Monetary amounts, and currency conversion rates are examples of something you should never, ever use standard binary floats for.

    Fact: Many major databases use some form of BCD for representing currency values. Enough so that IBM added a dedicated decimal FPU for their power6 series - it's so common on business database servers that it actually saves a lot.

    --
    xkcd is not in the sudoers file. This incident will be reported.