why on earth would you do this instead of navigating to C:\ directly aaaaAAAAAA
Another example of a program’s reliance on a bug is a shell extension that
relied on a memory leak in Explorer.
no no no no no no no
all of these are sourced from here: http://ptgmedia.pearsoncmg.com/images/9780321440303/samplechapter/Chen_bonus_ch01.pdf
relying on a memory leak is the most cursed programming decision ive ever heard of
me, being paid $9/hr to find out why Free Card Games Plus crashes if you're running an odd-numbered build of windows during daylight savings in a language with right-to-left text: i love my job
For example, one
useful shim is known as HeapPadAllocation; it is applied to programs that
have heap buffer overrun bugs. The shim intercepts calls to the
HeapAllocate function and adds a specified amount to the requested size.
That way, when the program overruns a buffer, it merely corrupts the padding
rather than corrupting the next heap block.
windows has code that adds an amount of memory "insulation" to a hardcoded list of shitty programs with buffer overflow errors to ensure that when they corrupt memory, the area they corrupt is unused
i do not envy windows programmers
"it merely corrupts the padding", chen calmly states, as my brain disintegrates into fine sand
it's bad for the windows team, sure, but think about the people working on wine, who have to independently discover these decades old bugs for themselves and intentionally reimplement them to get poorly written programs to work properly
this part of memory is supposed to be corrupted, please fix
can you break function x when program y is running? program y relies heavily on a bug in the windows 3.0 version of function x
q. why does windows do [bizarre action]
a. for compatibility. to answer in more detail, we'll need to discuss a flaw in
earlier versions of windows NT
pre-NT windows versions
MS-DOS before networking support had been added
the discovery of electricity
some random guy in the mid seventies: hey how about we do [seemingly good idea with nasty underlying assumptions]
raymond chen, today: and that's why windows reports that it only has 640k of memory if your locale is set to hebrew and the PID of explorer is a prime number during a leap second
this seems like a good time to drop another reminder that a windows registry file is called a hive because someone on the windows team had a fear of bees and the person developing the registry was being a jerk
adding "give raymond chen a hug and personally apologise to him on behalf of the human race" to my bucket list
it merely corrupts the padding
Locating items by blind counting
A PROBLEM was reported on a program that tries to be an Explorer clone
with a tree view on the left-hand side showing the folders in the system and a
content viewer on the right-hand side. In the program's toolbar are buttons
that quickly move you to each of the drives in the system. But when you run
the program under Windows 2000, the buttons take you to random folders
instead of to the root of the corresponding drive. What is happening?
Let's say you clicked on the button that says “Go to the C: drive.” The pro-
gram responds by starting at the Desktop folder, navigating to the first item
under the desktop, which it “knows” is the My Computer icon, then navigat-
ing to the third item under My Computer, which it “knows” is your C: drive.
Except that starting in Windows 2000, the order of the icons on the desk-
top changed. My Documents is the first icon on the desktop, and My
Computer moved to the second position. Now, the program goes to the first
item under the Desktop folder and finds My Documents instead of My
Computer. Undaunted, it continues to the third child under My Documents
and concludes that this is your C: drive.
The fix for this was to add an application compatibility flag that forced the
order of items on the Desktop folder to place My Computer first.
Why on Earth would you do any of this instead of smooch Lynne directly!
@CornishRepublicanArmy pls smooch
I will now smooch the Lynne, right on her heckin' adorable face *smooch!*
@lynnesbian oh my god
Wait, what. I wish to hear about this.
brevet aiitts CldaosllICU UCLAaAUDSO LALLY UVELEEPOELE LIC VUILICL SIZ,
Another program tried to read the name of the current screen saver from
the system. ini file, but if the screen saver’s name was more than twelve char-
acters long (i.e., longer than 8.3 format), the buffer overflowed. This is why all
the system screen savers in Windows 95 have short filenames.
Another category of problem is reading past the end of a buffer. A crash in
The strangest way of checking for success
I’M Nor Quire sure what the developers were thinking, but there was a multi-
media title that failed to run because of the way the program checked whether
its calls succeeded: Instead of testing the MMRESULT against MMSYSERR_
NOERROR, it asked the multimedia system to convert the error number to a
readable text string and compared the string against “The specified command
complete successfully.” Well, actually, it only checked whether the first sixteen
characters were “The specified co’—I guess somebody doing a code review
decided to do some performance optimization.
Of course, this technique doesn't work very well if the system changes the
precise wording of its error messages or if the end user is running a non-English
version of Windows.
You're always a day away
AFTER YOU INSTALL one particular program, it becomes impossible to
upgrade to Windows XP. Instead, Windows XP Setup keeps reporting that
existing software is not fully installed and that you have to restart the com-
puter to allow it to finish installing. Yet no matter how many times you restart
the computer, the message never goes away.
The reason for the false report is that the program writes itself into the
RunOnce key. Each time it runs, it re-adds itself to the Runonce key. So it
doesn't really run once; rather, it runs all the time, but one run at a time. Since
the RunOnce key is used for programs to finalize their installation, the contin-
uous presence of an entry in the RunOnce key causes Windows XP Setup to
conclude that it was put there by a Setup application that needs to do“one last
thing” to complete the install.
The solution was to teach Windows XP Setup to ignore this particular
program if it appears in the RunOnce key.
Rolling your own version of standard
WE RECEIVED REPORTS that a popular software development library was failing
to run on Windows 95. Upon closer inspection, we found the reason: The pro-
gram wanted to look at the system configuration file that was responsible for
Windows device drivers, known as system.ini. Instead of using the
Get PrivateProfilestring function to read strings from that file, the pro-
gram opened the file and parsed it manually. Unfortunately, what the authors of
the program failed to take into account was that Get PrivateProfileString
uses a case-insensitive comparison to locate the section. Their version used a
case-sensitive comparison. The result was that the program failed to locate the
[386Enh] section of the configuration file. The fix was to tweak Windows 95
Setup so that it used exactly the capitalization that the library expected.
Thie wacn't the only nracram to try ite hand at narsing the exrateam in: file
@lynnesbian nice share Lynne, reminds me a bit of "the night watch"
@lynnesbian forget debugging, just bundle the thing with a memory expansion pack -- oh we're not talking about Donkey Kong 64 are we
@lynnesbian doesn't ONT cover stuff that's at least as bad, if not worse. i.e. relying on internal functions only exported by ordinal, breaking programs when a new version of whatever lib is released
@lynnesbian or relying on deprecated registry keys from beta dev releases of OSes
@lynnesbian don't forget that program which deleted key ini files if they had any lines longer than 80 chars
@lynnesbian nevermind pointer arithmetic, someone break out the pointer algebra
@lynnesbian pointer geometry
@lynnesbian That reminds me -- there's a bug that's been in windows since at least 3.0 with the window move in the program menu ( opened with alt+spacebar )
If you select move, the mouse cursor jumps to the middle of the title bar, showing a move icon, but moving the mouse does not move the window, and trying to click drag (which makes sense ) ends the move operation.
One must hit an arrow key before moving with the mouse will actually work.
I've always asked "Why? WHY??" -- and now, thanks to you, i've realized that some ancient Important Third Party Program must have relied on that behaviour and....
I thought something was just wrong with my installation, and that I had certainly used the Move function properly at some point in the distant past.
@lynnesbian loading the old windows 3 memory manager for the bits (of programs that use memory they're not supposed to)
@lynnesbian I highly recommend checking out the new old thing blog
@SwooshyCueb i read it a lot actually
@lynnesbian msdn blogs have saved my ass so many times. Really a shame MS deleted most of them recently
@SwooshyCueb they did? :c
@lynnesbian yup :c
@lynnesbian I've tracked down a copy of that PDF for later perusal.
@lynnesbian it is my professional opinion as an electrical engineer that the discovery of electricity was itself a mistake
(i would sign and seal a statement to that effect, but my PE stamp still has my retired name on it)
lewd, kink, silly
@lynnesbian abdl glitchin'
Make sure you get the right Raymond Chen.
There's more than one at Microsoft.
@lynnesbian that's hilarious tbh
@lynnesbian at this point he could just be making these up and who would ever guess
@firstname.lastname@example.org's anti-chud pro-skub instance for funtimes