Many people take hoarding lightly, even though it’s a very serious disorder. Like most other things, hoarding starts slowly, and most people who suffer from this disorder aren’t even aware of it until it’s too late. However, people who compulsively acquire new objects are sometimes aware of it but refuse to acknowledge and deal with it.

If you’re wondering how to help a hoarder or are perhaps struggling to deal with a hoarder in your family, take a moment to check out some of the points we’ve made in this article. While it’s far from being a collection of rules, it’s designed to help and offer you a better insight into the mindset of people who are hoarders.

Sep 04, 2013 Analysis There has been much sniggering into sleeves after wags found they could upset iOS 6 iPhones and iPads, and Macs running OS X 10.8, by sending a simple rogue text message or email. 7 DECLUTTERING TIPS FOR HOARDERS (and those that aren’t quite there yet) 1. CONVINCE YOURSELF FIRST. If you’re having a hard time seeing the reason why you need to start decluttering, many people have benefitted from using this. I’m sure you’ve heard the saying “mind over matter” many times in your life for many different things.

Of all the things I didn't expect to do this weekend. This tops the list! Out on an adventure to look through a 100 year accumulation of items, I end up wi.

What is a Hoarding Disorder?

Before we dive deeper into the matter, it’s important to get familiar with the condition itself so that we can understand the concept and make the battle against it a bit easier.

According to the Mayo Clinic,

“Hoarding disorder is a persistent difficulty discarding or parting with possessions because of a perceived need to save them. A person with a hoarding disorder experiences distress at the thought of getting rid of the items. Excessive accumulation of items, regardless of actual value, occurs.”

As you can tell, hoarding has nothing to do with the value of the items that are being accumulated, nor does it have anything to do with collectibles. The difference between hoarding and collecting is pretty simple – hoarders seldom seek to display their possessions, while in collecting, people proudly display their belongings and keep them organized.

How To Help a Hoarder Who Doesn’t Want Help?

The first thing you should remember if you’re looking to help a person in need is to avoid forcing them to do anything. Nothing good ever comes from forcing one to change their habits, and that’s why this is a process rather than being an intervention.

  • Providing Motivation and Listening to What They Have to Say

Hoarder

One of the best things you can do is — listen, even though it doesn’t seem effective at first glance. Many hoarders struggle to articulate the reasoning behind their behavior, and more importantly – most of them are quite embarrassed to admit that they have a problem.

Being a good listener allows you to help them open up about the issues that have been troubling them for a long time. Instead of acting like a psychologist and offering a bunch of quick solutions, you should listen carefully and ask questions that might help streamline the process of getting rid of this horrible addiction.

Try to get to the bottom of the problem by circling around with important questions, and you will, sooner or later, find success.

  • Encourage Them To Seek Professional Help

There is nothing embarrassing in admitting you have a problem and asking for help. In fact, it might be one of the only effective ways to deal with this problem, especially if it’s particularly severe.
If you’re looking for the answer to the question of how to get help for a hoarder, scheduling an appointment with a professional would be an excellent start. However, not all people are eager to share their predicaments with another person (even if that other person is a licensed professional), so be sure to bring this up gradually rather than insisting on it.

  • Do Not Clean Up For Them

Even though you’re looking to help your friend or family member, one thing you should NOT do is take it on yourself and cleanup for them. Individuals who are struggling with hoarding disorder should make a conscious and independent decision to better themselves. While it’s good and recommended for you to intervene as a friend, cleaning things up for and instead of your friend is definitely a bad idea.

  • Help Them Sort Out Their Stuff

In some severe cases, hoarders accumulate so many things that it fills up the whole house. Even if you manage to persuade them to stop hoarding, something has to be done about the already hoarded items or else your endeavors are in vain.

There is no easy way around this. You will have to volunteer to help your friend or loved one sort their things out, get rid of worthless items, and more importantly – prevent them from doing it all over again.

  • Take Some Time to Educate Yourself

As we’ve mentioned, hoarding is no laughing matter. Even though some people might think they are familiar with this particular disorder, it’s often not the case. In fact, helping your friend the way you are not supposed to is always going to cause more harm than good. That’s why it is important that you inform and educate yourself about this condition and take the right steps rather than doing what you think is right and (seemingly) helpful.

  • Praise a Change and Celebrate Small Victories

Very rarely will you manage to “cure” your friend in one go. As we’ve mentioned, going through hoarding rehabilitation is more of a process rather than being an intervention, and that’s why it’s important to take things slowly and celebrate small victories.

Don’t hesitate to commend an improvement because that’s one of the most effective ways to motivate your friend to keep pushing even further. It will definitely take a lot of time before you see a massive improvement, but small steps are what counts here.

How To Deal With a Hoarder in the Family?

Even though there is not much difference between dealing with friends and family members, there are a couple of things you should keep in mind.

Firstly, you should acknowledge that the person has a right to make their own decisions. This shows a healthy amount of respect as well as affection. Team up with them and ask them about their issues; family members tend to have a stronger bond in comparison to friendships. Therefore, it’s always a good idea to sit down with your brother, mother, father, or anyone who needs help and just talk to them. Naturally, you should avoid being judgmental as that will only worsen the situation.

Also, never toss anything out without permission. Even if you think a particular item is worthless, obsolete, or simply doesn’t belong somewhere, you don’t have the right to throw something out that isn’t yours.

What are the Negative Effects of Hoarding?

While most people are aware of the obvious downsides of compulsive hoarding, there are some things that aren’t as apparent. Here are a couple of alarming downsides of hoarding:

  • Constant Clutter

Severe clutter is not only visually unappealing, but it’s also a serious health hazard. On top of that, it can also be a structural and fire hazard, depending on the severity of the case.
Many hoarders simply forget about 90% of things they have underneath the first few layers of clutter. This can be extremely dangerous because a single pack of white-phosphorous matches can self-ignite and cause a catastrophe, even though they have been buried under a pile of worthless stuff for decades.

  • Conflicts with Family and Friends

No matter how affectionate and tolerant you are, there will come a time when you’ve just had enough of it. This is a serious issue, and it has affected numerous families and tore them apart. That’s why it’s important to act promptly and help your friend or family member as soon as you notice something is off (a room full of worthless and disorganized stuff is a rather obvious clue).

  • Evictions and Financial Issues

It goes without saying that most landlords won’t tolerate any level of hoarding, let alone the severe cases. Consequently, your friend will end up on the street sooner or later, and more importantly – this can lead to hospitalization and homelessness, both of which are alarming, to say the least.

Look for Ways to Help Them

Instead of looking at how to deal with a hoarder, you should instead look for ways to help them. We have covered a few methods and ways you can use in order to help your friend or family member, but rest assured there are plenty of other options out there.

Hoarders Horrible House Of Stuff Mac Os 11

The essential thing you should remember is to stay calm, collected, and most importantly – tolerant. You will, most certainly, have to go through a lot of tough moments, but in the end, all that counts is the level of success. With that being said, don’t be afraid of failure because you’ll very rarely manage to help your loved one right from the get-go.

If you would like to know more about disorders, hoarding cleanup procedures, and similar subjects, don’t hesitate to read our other articles! They are a great resource for anyone who’s looking to solve a particular predicament but isn’t sure how.

Analysis There has been much sniggering into sleeves after wags found they could upset iOS 6 iPhones and iPads, and Macs running OS X 10.8, by sending a simple rogue text message or email.

A bug is triggered when the CoreText component in vulnerable Apple operating systems tries to render on screen a particular sequence of Unicode characters: the kernel reacts by killing the running program, be it your web browser, message client, Twitter app or whatever tried to use CoreText to display the naughty string.

Much hilarity ensued as people tweeted the special characters, posted them in web article comments or texted them, and rejoiced in the howls of fanbois' frustration. (Facebook had to block the string from being submitted as a status update.)

But how did that bug work? After some examination, it appears to be a rather cute programming cock-up that's fairly easy to explain. The vulnerable code has probably been in the wild for yonks; some people noticed it six months ago and it appeared on some slides [PDF] in April for a Hack In The Box conference presentation. Barely anyone took any notice back then - but it started to spread around the web over the weekend after a trigger string appeared on a Russian website.

Too long, didn't read: A summary

Apple's CoreText rendering system uses signed integers to pass around array indexes and string lengths. A negative length, -1, is passed unchecked to a library function which uses it as an unsigned long integer to set the bounds of an array. This causes the library to attempt to read beyond the end of an array and into unallocated memory, triggering a fatal exception.

If you're au fait with disassembling software to debug it, what follows will be obvious to you. If you're interested in what goes on under your Mac or iThing's hood, then read on.

First of all, let's look at the crash. All these steps occurred on a 64-bit Mac running OS X 10.8.4. By making the Terminal app display a particular string of five 16-bit Unicode characters, the program is quickly killed by the kernel with this OS-generated fault report:

Grokking these crash logs can be a bit of a headache, but the first thing to spot is that the processor was running inside a library called libvDSP.dylib, specifically the instruction 117462 bytes into that library, when the fault occurred. This is right at the top of the stack backtrace, at line 30 in the report, which tries to describe the sequence of functions the code called before hitting the bug.

If we open libvDSP (located deep within the /System/Library/ filesystem hierarchy of your computer) in the rather handy reverse-engineering tool Hopper, we can look at the compiled machine code that blew up. See the screenshot below: the faulting instruction 117462 bytes in, or 1cad6 in hex, is highlighted (click to enlarge).

That instruction, addsd xmm1, qword [ds:rdi+rsi], tries to load a 64-bit value into the xmm1 register from the memory address calculated by adding the rdi and rsi registers together. The crash log states we were killed by an EXC_BAD_ACCESS fault at address 0x00007fa95cc00008; in other words, that instruction tried to read data from that memory address, but it was marked as inaccessible. We're not supposed to be touching that part of the memory map, so our program is killed by the kernel before any damage can be done.

In fact, the log handily tells us that, just before the crash, there was 2048KB of memory allocated for Terminal up to the address 0x00007fa95cc00000. It seems likely the program stepped beyond that limit and triggered the fatal exception. If we scroll through the crash log to the thread state, we can see the values that were in the CPU registers at the time of the crash:

Hopper highlights that there's a loop running between 0x1cad2 and 0x1cae7, reading in data and adding it to three running totals in xmm0, xmm1 and xmm2, and subtracting the value in register rcx each time until it crosses zero at which point we jump out of the loop - effectively using rcx as a loop countdown. In each iteration, rdi increases and rsi remains constant. As mentioned above, these two are added together to calculate the address we read from; you can see that adding rdi to rsi produces the address 0x7fa95cc00008, which (as seen above) triggers the fault.

So, rdi is growing too large, forcing us to read memory not allocated to us. The address of the data we attempt to fetch is only constrained by rcx, so this suggests rcx is too large - it doesn't hit zero before rdi pushes us into invalid memory - and yes, that's clearly the case: at 0xfffffffffffc3e0a by the time of the crash, rcx has been counting down from an unfeasibly large value, far greater than the memory allocated to the entire program. It should be fairly small. What's gone wrong?

By analysing the debugging information in the libvDSP binary, Hopper tells us we're in the vDSP_sveD() function of the library at the time of the fault. Apple has documented that function here:

It's used to sum an array of double-precision floating-point numbers. Let's map those input parameters for the function to the registers used in this compiled code, following the System V AMD64 ABI that Mac OS X uses:

The variable type vDSP_Length is defined as follows:

So rcx is supposed to be given a positive-only integer: the number of array elements to process, hence why it counts down to zero in the loop.

Something inside the CoreText component is therefore calling vDSP_sveD() with a stupidly large __vDSP_N value and the library function does nothing to check the sanity of this number because it assumes the caller knows what it's doing. This large loop counter value causes rdi to exceed the bounds of the input array __vDSP_A and blow up our app.

So, what's calling this library function? Looking next down the stack trace, we find the processor was in the CoreText component's TRun::TRun function, specifically 850 bytes in. There, we find an instruction that calls another CoreText function labelled TStorageRange::SetStorageSubRange(), which is disassembled below (click to enlarge):

This SetStorageSubRange() function is internal to CoreText and isn't documented publicly. But we can see it calls vDSP_sveD() at 0x274f9, leading to our crash as described above.

Just before that doomed function call, rcx (which holds the dodgy array length value passed to libvDSP) takes its value from the r8 register at 0x274f6. The function vDSP_sveD() doesn't modify r8, which is very handy for us snooping around. From our aforementioned crash dump, we can see the contents of r8, which is used to initialise the loop countdown register rcx just before vDSP_sveD() is called.

And yes, its value is ridiculously big. In fact it's the largest possible value for an unsigned 64-bit register, so no wonder we exceed the array's bounds and crash:

That unsigned integer, when expressed as a signed decimal integer, is -1, as per the rules of two's complement.

So vDSP_sveD() is called by CoreText's SetStorageSubRange() with a negative array length, which isn't what the library function expects: it's defined as taking a positive-only value. SetStorageSubRange() isn't calling libvDSP's summing function properly.

Stuff

Where does this negative number come from? Back inside SetStorageSubRange(), we see that the r8 register (used to initialised rcx for vDSP_sveD()) is given the value of rdx near the start of the function at 0x2744e. By following all the possible code paths in SetStorageSubRange(), we can see that the value of r8 doesn't change from that initial value if it's either negative or an internal flag bit is clear. Therefore the -1 passed to vDSP_sveD() comes from rdx.

That rdx register is an input parameter of the SetStorageSubRange(). Judging by the code, the first parameter to the function, stored in rdi, is a pointer to a 64-bit variable that vDSP_sveD()'s summing calculation should be stored in. That leaves the two other entry parameters in rdx and rsi.

According to the debugging information, SetStorageSubRange() takes a CFRange structure as one of its inputs. This struct is defined publicly in here:

This structure describes 'a range of sequential items in a container, such as characters in a buffer'. It contains two CFIndex variables, one labelled location, which defines the starting point in an array of things, and the other labelled length, which is the number of things in that array that we're interested in.

And CFIndex is defined as:

So it appears the second parameter to the SetStorageSubRange() function is a CFRange structure, placing the location in rsi and the length value in rdx, which is a negative integer. Whatever called SetStorageSubRange() thus passed in -1 as a string length, which trickled down to the crash described above.

(Given that length is a signed long, -1 may be a valid number. Apple's Core rendering system uses signed CFIndex values 'as an array index and for count, size, and length parameters and return values' throughout its software.)

Stepping back once more, we reach the non-trivial function Trun::Trun() in CoreText, which called SetStorageSubRange() at 0x25d57. A disassembly is below (click to enlarge):

Things get interesting at the 0x25d25 mark: the register rbx is incremented and its value copied into rdx. Then the value of the r15 register is subtracted from rdx. The resulting value in rdx is then passed to SetStorageSubRange(), which we've seen is -1. And we know the value of r15, because miraculously it has been preserved from that moment all the way through to the crash. So, in our register dump:

Working backwards, rbx has to be zero just before it's incremented in order to land us with an rdx of -1 that knocks down the house of cards later on. Following the spaghetti assembly code up through TRun::TRun(), it seems to be that rbx is a previously calculated length, quite likely the number of characters or Unicode glyphs to process.

Filippo Bigarella, who is attempting to patch the bug for jailbroken devices, found that the special Unicode of Death sequence made the publicly documentedCTRunGetGlyphCount() function in CoreText return a value of -1. That function is supposed to return the number of Unicode glyphs in a 'glyph run, which is a set of consecutive glyphs sharing the same attributes and direction'.

A negative value doesn't seem right at this point. It suggests that the killer Unicode sting - a short nonsensical mix of Cyrillic and Arabic - is a sequence of characters that causes the operating system to determine that the string has a zero or negative length. For the uninitiated, Unicode is a way of storing and processing letters beyond the traditional ASCII set you'll no doubt be familiar with; it's capable of representing characters from Arabic and Asian languages to mathematical symbols.

Unicode can also set the direction from left to right and right to left, and combine multiple glyphs into a custom one. Call it a hunch, or a considered guess, but given your humble hack's experience of font renderers, it's not inconceivable that CoreText could get confused by quirky Unicode, and ends up computing a negative length. If anyone has any bright ideas, get in touch.

One bug-triggering character sequence involves a simple space (ASCII code 0x20), which may be related to whitespace-handling code seen in the stack trace.

Final thoughts

Hoarder's Horrible House Of Stuff Mac Os Download

The code for CTRunGetGlyphCount() does not calculate the number of glyphs in a run: instead it pulls up a value from a data structure that must have been initialised earlier. Bigarella tells me the glyph count miscalculation may occur when CoreText creates a CTRunRef object that represents a line of text to render.

Here the trail goes cold; the quarry disappears into the long grass of TRun::Trun() and beyond. The next step would be to fire up a debugger and slowly step through the execution until it becomes clear how the invalid glyph count is calculated. Perhaps revealing a recipe for creating killer Unicode strings for an unpatched bug wouldn't be the best idea, anyway.

In the meantime, the flaw as it stands doesn't appear to be exploitable beyond crashing a user's program: it's mighty hard to leverage an end-of-array read fault into something more serious.

It can also be triggered on 32-bit ARM-powered iPhones, iPods and iPads running the latest publicly available version of iOS. This means the bug isn't specific to a particular architecture: the buffer overrun will work in much the same way except within 32 bits rather than 64 as seen above.

Hoarders Horrible House Of Stuff Mac Os Catalina

The app-slaying coding error is absent from iOS 7 and Mac OS X 10.9 (codenamed Mavericks), both due for a public release soon. El Reg contacted Apple to find out whether or not its older software will be fixed, but no one was available to comment.

Just as articles have typos, software has bugs. And Apple support forums have complaints about Unicode-triggered crashes. ®

House Of Stuff Lakeland Fl

Get ourTech Resources