Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Side by Side Diff: patches/nspr-overflow.patch

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « patches/nspr-attach-as-system-thread.patch ('k') | patches/nspr-remove-io.patch » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 diff --git a/nspr/lib/ds/plarena.c b/nspr/lib/ds/plarena.c
2 index 95e1931..689496d 100644
3 --- a/nspr/lib/ds/plarena.c
4 +++ b/nspr/lib/ds/plarena.c
5 @@ -93,6 +93,9 @@ PR_IMPLEMENT(void) PL_InitArenaPool(
6 pool->mask = PR_BITMASK(PR_CeilingLog2(align));
7
8 pool->first.next = NULL;
9 + /* Set all three addresses in pool->first to the same dummy value.
10 + * These addresses are only compared with each other, but never
11 + * dereferenced. */
12 pool->first.base = pool->first.avail = pool->first.limit =
13 (PRUword)PL_ARENA_ALIGN(pool, &pool->first + 1);
14 pool->current = &pool->first;
15 @@ -144,10 +147,14 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, P RUint32 nb)
16 {
17 PLArena *a;
18 char *rp; /* returned pointer */
19 + PRUint32 nbOld;
20
21 PR_ASSERT((nb & pool->mask) == 0);
22
23 + nbOld = nb;
24 nb = (PRUword)PL_ARENA_ALIGN(pool, nb); /* force alignment */
25 + if (nb < nbOld)
26 + return NULL;
27
28 /* attempt to allocate from arenas at pool->current */
29 {
30 @@ -208,6 +215,7 @@ PR_IMPLEMENT(void *) PL_ArenaAllocate(PLArenaPool *pool, PRU int32 nb)
31 PL_MAKE_MEM_NOACCESS((void*)a->avail, a->limit - a->avail);
32 rp = (char *)a->avail;
33 a->avail += nb;
34 + PR_ASSERT(a->avail <= a->limit);
35 /* the newly allocated arena is linked after pool->current
36 * and becomes pool->current */
37 a->next = pool->current->next;
38 @@ -230,6 +238,8 @@ PR_IMPLEMENT(void *) PL_ArenaGrow(
39 {
40 void *newp;
41
42 + if (PR_UINT32_MAX - size < incr)
43 + return NULL;
44 PL_ARENA_ALLOCATE(newp, pool, size + incr);
45 if (newp)
46 memcpy(newp, p, size);
47 diff --git a/nspr/lib/ds/plarena.h b/nspr/lib/ds/plarena.h
48 index 8dcfb3e..3e51f83 100644
49 --- a/nspr/lib/ds/plarena.h
50 +++ b/nspr/lib/ds/plarena.h
51 @@ -139,32 +139,37 @@ void __asan_unpoison_memory_region(void const volatile *ad dr, size_t size);
52 PLArena *_a = (pool)->current; \
53 PRUint32 _nb = PL_ARENA_ALIGN(pool, nb); \
54 PRUword _p = _a->avail; \
55 - PRUword _q = _p + _nb; \
56 - if (_q > _a->limit) { \
57 + if (_nb < nb) { \
58 + _p = 0; \
59 + } else if (_nb > (_a->limit - _a->avail)) { \
60 _p = (PRUword)PL_ArenaAllocate(pool, _nb); \
61 } else { \
62 - _a->avail = _q; \
63 + _a->avail += _nb; \
64 } \
65 p = (void *)_p; \
66 - PL_MAKE_MEM_UNDEFINED(p, nb); \
67 - PL_ArenaCountAllocation(pool, nb); \
68 + if (p) { \
69 + PL_MAKE_MEM_UNDEFINED(p, nb); \
70 + PL_ArenaCountAllocation(pool, nb); \
71 + } \
72 PR_END_MACRO
73
74 #define PL_ARENA_GROW(p, pool, size, incr) \
75 PR_BEGIN_MACRO \
76 PLArena *_a = (pool)->current; \
77 PRUint32 _incr = PL_ARENA_ALIGN(pool, incr); \
78 - PRUword _p = _a->avail; \
79 - PRUword _q = _p + _incr; \
80 - if (_p == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
81 - _q <= _a->limit) { \
82 + if (_incr < incr) { \
83 + p = NULL; \
84 + } else if (_a->avail == (PRUword)(p) + PL_ARENA_ALIGN(pool, size) && \
85 + _incr <= (_a->limit - _a->avail)) { \
86 PL_MAKE_MEM_UNDEFINED((unsigned char *)(p) + size, incr); \
87 - _a->avail = _q; \
88 + _a->avail += _incr; \
89 PL_ArenaCountInplaceGrowth(pool, size, incr); \
90 } else { \
91 p = PL_ArenaGrow(pool, p, size, incr); \
92 } \
93 - PL_ArenaCountGrowth(pool, size, incr); \
94 + if (p) {\
95 + PL_ArenaCountGrowth(pool, size, incr); \
96 + } \
97 PR_END_MACRO
98
99 #define PL_ARENA_MARK(pool) ((void *) (pool)->current->avail)
OLDNEW
« no previous file with comments | « patches/nspr-attach-as-system-thread.patch ('k') | patches/nspr-remove-io.patch » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698