Bug 1416666 - Avoid doing a memset on a non-POD structure. r?waldo
MozReview-Commit-ID: Djf8EhIGDya
--- a/js/public/HashTable.h
+++ b/js/public/HashTable.h
@@ -7,16 +7,17 @@
#ifndef js_HashTable_h
#define js_HashTable_h
#include "mozilla/Alignment.h"
#include "mozilla/Assertions.h"
#include "mozilla/Attributes.h"
#include "mozilla/Casting.h"
#include "mozilla/HashFunctions.h"
+#include "mozilla/MemoryChecking.h"
#include "mozilla/MemoryReporting.h"
#include "mozilla/Move.h"
#include "mozilla/Opaque.h"
#include "mozilla/PodOperations.h"
#include "mozilla/ReentrancyGuard.h"
#include "mozilla/TemplateLib.h"
#include "mozilla/TypeTraits.h"
#include "mozilla/UniquePtr.h"
@@ -1665,24 +1666,25 @@ class HashTable : private AllocPolicy
#ifdef JS_DEBUG
mutationCount++;
#endif
}
public:
void clear()
{
- if (mozilla::IsPod<Entry>::value) {
- memset(table, 0, sizeof(*table) * capacity());
- } else {
- uint32_t tableCapacity = capacity();
+ uint32_t tableCapacity = capacity();
+
+ if (!mozilla::IsPod<Entry>::value) {
Entry* end = table + tableCapacity;
for (Entry* e = table; e < end; ++e)
e->clear();
}
+
+ MOZ_MAKE_MEM_UNDEFINED(table, sizeof(*table) * tableCapacity);
removedCount = 0;
entryCount = 0;
#ifdef JS_DEBUG
mutationCount++;
#endif
}
void clearAndShrink()